From this point onward I'll be using the Java/C/C++/C# code syntax. A boolean expression is any valid expression that results in a boolean value. This may be anything from the constants true and false all the way to complex expressions such as x == 1 && (y > 3 || z <= 1.25) && !checkSomething(x, y, z) (assuming checkSomething(...) returns a boolean).
Say you have the condition c and the boolean expressions p and q. The following table contains all possible conversions from a ternary expression to an equivalent boolean expression:
# | Ternary Expression | if-then-else Expression | Equivalent to |
1 | c ? p : q | if (c) p else q | (c && p) || (!c && q) |
2 | c ? p : true | if (c) p else true | !c || p |
3 | c ? p : false | if (c) p else false | c && p |
4 | c ? true : p | if (c) true else p | c || p |
5 | c ? false : p | if (c) false else p | !c && p |
6 | c ? true : false | if (c) true else false | c |
7 | c ? false : true | if (c) false else true | !c |
8 | c ? true : true | if (c) true else true | true |
9 | c ? false : false | if (c) false else false | false |
Note that #1 may or may not result in more readable code; it is probably better to use the ternary operator in that case. #6 through #9 are poor coding practices and should be replaced as soon as possible by their equivalent boolean expressions. #2 through #5 require attention and almost certainly will result in better, cleaner code.
Also note that c ? p : q is equivalent to if (c) b=p else b=q. In other words, if any boolean variables are assigned a value that depends on the condition of an if-then-else clause, then that value can be simplified according to the equivalence table above, as long as there are no unintended side-effects.
Let's try this with an example:
boolean b = i > 5 ? j == 3 : false
or, as an if-then-else clause:
boolean b;
if (i > 5) b = j == 3; else b = false;
Looking at the above table, this matches expression #3, with:
c = i > 5
p = j == 3
The equivalent expression would be:
boolean b = i > 5 && j == 3
which is slightly shorter and certainly less confusing than the above ternary or if-then-else statements.
I never really used Ternary Expressions but you got a fair point.
ReplyDelete