Tips & Tricks of Learning Ternary Operators
I started using ternary operator logic about six months ago and notice myself using shorthand if/else logic all the time. It shortens my code, the time to write it, and makes me look smarter to the mustaches.
Thanks to Google Analytics, I've found that I receive many page views from programmers looking for information on "shorthand if/else", "ternary logic", and "shorthand logic php". I've created a few guidelines for "?:" rookies to make learning shorthand if/else as quick and easy as it should be.
Start With If/Else, Then Convert To Ternary
Start with your expressions in simple if/else code, and then carefully convert each if/else into a shorter ternary statement. It may help to take the additional step of creating variables for each expression.
/* start with if / else ... */
if($language == 'php')
{
$dynamic = true;
}
else
{
$dynamic = false;
}
/* ... then convert */
$dynamic = ($language == 'php' ? true : false); //or 1 : 0
/* optional code shortening */
$dynamic = $language == 'php';
Use Parenthesis To Group Logic
Keeping your expressions in parentheses is a great way to keep your code organized for later maintenance.
//viva grouping!
$age_code = ($age > 10 ? ($age > 20 ? ($age > 30 ? 'senior' : 'adult') : 'teen') : 'youngster');
//the following isn't as fun to read
$age_code = $age > 10 ? $age > 20 ? $age > 30 ? 'senior' : 'adult' : 'teen' : 'youngster';
Use "Intermediate" Variables For Parts of the Expression
The above 10/20/30 code is rough and can be difficult to maintain. Using variables may help simplify things.
//better?
$over_30 = ($age > 30 ? 'senior' : 'adult');
$over_20 = ($age > 20 ? $over_30 : 'teen');
$age_code = ($age > 10 ? $over_20 : 'youngster');
Use True/False Boolean, Not Just The Expression
As you probably know, you can use JUST the expression as the return value. If you believe that will hurt you during the learning process, explicitly return true or false.
/* explicit */
$can_drive = ($age >= 16 ? true : false);
/* implicit, just the expression */
$can_drive = $age >= 16;
Know When Not To Use Ternary Logic
If there are many nested if/else statements in the logic, shorthand expressions may not be the best option. For example, the following snippet of code returns whether a given year is a leap year:
$is_leap_year = ((($year % 4) == 0) && ((($year % 100) != 0) || (($year %400) == 0)));
The above code works well for ternary logic because it wont have to be updated frequently — the leap year "calculation" is always the same. If you have code that needs to be updated often, shorthand if/else may not be the optimal choice.
Test! Test! Test!
As with any type of programming, test early and often!
- Login or register to post comments
- 1585 reads
- Flag as offensive
- Printer-friendly version







Comments
Christian Piper replied on Tue, 2008/03/18 - 1:54pm
Another great use for ternary op's is in templating engines where the dev and designer can work more easily...
Christian Piper replied on Tue, 2008/03/18 - 9:08pm
My paste borked...hence I gave up
k k replied on Tue, 2008/03/18 - 11:31pm
in response to: FuzzyOne
:P
Stoyan Kyosev replied on Thu, 2008/03/20 - 9:58am
Dear PHP newcomer reading this post. Please read it carefully and try to understand the logic behind the ternary operator. After this brain-excercise, just use your if()'s and almost forget about the ternary. With unnecessary use of ternary operators you just DON'T "keep your code organized for later maintenance", you keep your code more difficult for others (and later for you) to read:
Compare:
and
Which one is easier to understand at first reading ? To which is easier to add more conditions ?
The good programming is not the tricky programming.
If you have one short and simple condition, you could use ternary operator:
But in this situation I wouldn't recommend its use:
The code is long and hard to read. Just rewrite it:
Keep your code easy to read even at the expense of some extra chars typed. It's good to know a language features, but do not overuse them.
Michael Sharman replied on Fri, 2008/05/02 - 10:02pm
Good article, I do agree with Stoyan however on using the ternary for more complex scenarios. I imagine though that David was purely showing what you can do...not really recommending a best practice approach as such.
Ternary's can be fantastic, good to know what you can and can't do but readability and maintability is king.
mohayus replied on Thu, 2008/05/15 - 9:22pm