' 09 May, 28 - 12:00 pm

Cool Flash Tip of the Week 1

Post Header

I’m going to start a series that will occur every week. A cool flash tip or something I think not many people know about. Be on the lookout every week for a new tip. This week’s CFT is ……drumroll…….” The Tertiary Operator “.


I spend alot of time traversing flash posts looking at other peoples code and I often see a large if else block to change a simple variable. Using the Tertiary Operator we can simplify this into one line of code. Shorter code is always better in my opinion. Plus can save you a couple bytes in your code.

Here is an example of what I see.





var myBool:Boolean = false;
var myVar:Number = 12;
 
if(myBool == true)
{
    myVar = 15;
}
else if(myBool == false && myVar == 10)
{
    myVar = 40;
}
else
{
      myVar = 0;
}

Now this is all well and dandy, but it is a waste of space and can be simplified by a lot. One, when testing a Boolean there is no need to test to true or false. Instead if you want to test if something is true, you can just place the variable in the if parenthesis. This will automatically test to true. To test if a variable is false, use !. Here is an example.


var myBool:Boolean = false;
var myVar:Number = 12;
 
if(myBool )
{
    myVar = 15;
}
else if(!myBool && myVar == 10)
{
    myVar = 40;
}
else
{
      myVar = 0;
}

This already shortens up our code a bit. But we can take this a step further using the Tertiary Operator. The syntax for this is pretty simple once you know what it means.


//Tertiary Syntax
 
(Test) ? True : False;


Basically, If the test is true, the code after the ? executes. If the test is false the code after the : executes.


  • ? = if
  • : = else


You can also string together Tertiary statements to make and if else if else etc. Here’s how we write the same code from above over using the Tertiary Operator.


var myBool:Boolean = false;
var myVar:Number = 12;
 
myVar = (myBool ) ? 15 : (!myBool && myVar == 10)  ? 40 : 0;


WOW, look how much space we saved, and it i still readable. I implore everyone to start using this and save space =D. Be aware that it is advised no to string Tertiary statements past “If..Else”. If you liked this idea of CFT ( Cool Flash Tip ), then leave a comment, subscribe to the feed or / and follow me on twitter. It would be great to get some feedback on if this is helpful or not and maybe some tips you would like to see featured here.


Happy Flashing

No related posts.

  • Your site is worth beeing in the top cause it contains really amazing information.
  • You know so many interesting infomation. You might be very wise. I like such people. Don't top writing.
  • thanks for the tip. great short cut
  • Nice Post!

    Keep posting such a GOOD Tips :)
  • Hi, good post. I have been woondering about this issue,so thanks for posting. I’ll definitely be coming back to your site.
  • And like a book i read once said:
    "The tertiary operator saves on size in you scripts. But it hardly saves on file size and apart from that, programmers tend to avoid using the tertiary operator because of its cryptic syntax"

    Wise words. But that book was about C++ and I didn't know it existed in AS3.0
  • I agree with Tyler.
    It is good to reduce the but the structure should give some meaning
  • Tyler
    I like the tertiary operator quite a bit, and it is great for simple assignments.

    However, with the example you given, you've nested the operator. Personally, I do not like this style, as it breaks the scan-ability of the code.

    So something like:

    var username = user ? user.name : "";

    is great. Quick to read and easy to see what is happening. Anything more complicated, I prefer to see it broken out like:

    if(myBool) {
    myVar = 15;
    } else if (myVar == 10) {
    myVar = 40;
    } else {
    myVar = 0;
    }

    Which allows to scan line by line without having to stop and examine a line to really determine what it is doing.
  • @Jay, true, I was just demonstrating the usage of the ! operator.
  • Jay
    An important improvement Tyler made that wasn't elaborated on is the removal of "!myBool" from the second if statement. That test was redundant since it would only happen if the first test didn't find myBool == true.
  • True, you have a good point. I agree with you in this sense. I guess it comes down to personal preference. I would most likely break it apart too, but just wanted to illustrate this way just in case people want to nest it.

    Stay tuned until the next tip =D
  • Russ
    been using this for a while when working in Flex and need a conditional in an mxml tag, but for some reason I never think to use it when writing AS. Does make for cleaner code.
  • Allows Doing Great Work Man

    Thank's !!
    .......

    i have have question ?!!!

    what is you name ?:)
  • Allows Doing Great Work Man

    Thank’s !!
    …….

    i have have question ?!!!

    what is your name ?:)
  • Thanks, Its Clemente Gomez =D
blog comments powered by Disqus