After reading To ternary or not to ternary? and Is this a reasonable use of the ternary operator?, I gathered that simple uses of the ternary operator are generally accepted, because they do not hurt readability. I also gathered that having one side of the ternary block return null when you don’t want it to do something is a complete waste.. However, I ran across this case while refactoring my site that made me wrinkle my nose:
if ($success) {
$database->commit();
} else {
$database->rollback();
}
I refactored this down to
$success ? $database->commit() : $database->rollback();
And I was pretty satisfied with it.. but something inside me made me come here for input. Exception catching aside, would you consider this an okay use case? Am I wondering if this is an okay use because I have never done this before, or because it really is bad practice? This doesn’t seem difficult to me, but would this seem difficult to understand for anyone else? Does it depend on the language.. as in, would this be more/less wrong in C, C++, or Java?
I would be more inclined to use it in case the two actions are mutually-exclusive and/or opposite (yet related to each other), for example:
For two unrelated actions I would be less inclined to use it, the reason being that there is a higher probability for one of the branches to need expanding in the future. If that’s the case, you will again need to rewrite it as an
if-elsestatement. Imagine that you have:If at some point you decide that the first branch needs to
do_def()as well, you’ll need to rewrite the whole thing to anif-elsestatement again.The more frequent usage of the ternary operator, however, is:
This way you are evaluating it as an expression, not as a statement.