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 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';
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';
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');
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;
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.
As with any type of programming, test early and often!
Links:
[1] http://davidwalsh.name/learning-ternary-operators-tips-tricks