4 ms·
Sure, once you cherry-pick the most trivial imaginable example ternary expressions are easy enough to read. First counter-example which came to mind: print("
by l0b0 5y ago
Sure, once you cherry-pick the most trivial imaginable example ternary expressions are easy enough to read. First counter-example which came to mind:
print("yes") if random.choice([True, False]) else print("no")
Does this do the right thing? I was pleasantly surprised to find that this is indeed lazily evaluated, but that's not at all intuitive: first because `print("yes")` comes before the conditional (note that the Lisp example had the conditional first), and second because not all popular languages work like that.
There are lots of examples where ternary makes things obviously harder to read, such as when at least two of the three expressions are non-trivial. Which one would you rather read?
if some_complex_condition(using, four, different, parameters):
do_a_thing(now, using, five, different, parameters)
else:
do_another_thing(with, three, parameters)
or
do_a_thing(now, using, five, different, parameters) if some_complex_condition(using, four, different, parameters) else do_another_thing(having, three, parameters)
(or
do_a_thing(now, using, five, different, parameters) if some_complex_condition(
using, four, different, parameters
) else do_another_thing(having, three, parameters)
after Black.)
- detaro 5y agoNeither of your examples qualify for the lint rule that's about cases that assign to the same variable, so I'm not sure why you accuse the author of "cherry-picking"?
- l0b0 5y agoI didn't realize this was only for assignments, but the same applies if you prepend `x =` before the relevant lines.
- balthasar 5y agoI would write it like this. Seems fine to me do_a_thing(now, using, five, different, parameters ) if some_complex_condition(using, four, different, parameters ) else do_another_thing(having, three, parameters)
- nirs 5y agoTheses are good examples for not using ternary expressions. The code looks wrong even if it is correct, and it is hard to follow. There is a very simple rule avoiding most of these issues - if the ternary expression does not fit in one line, use if/else.