Ternary operators, conditionals in the middle

Submitted by gwolf on Wed, 03/02/2005 - 11:54
Daniel Silverstone asked on our opinions on ternary operators, and as it seems his blog doesn't like comments (boo!). I just love them. I really like being as concise as possible, without being cryptic - I find it awful to say [code="C"]if (condition) var = val1; else var = val2;[/code] Not only it hides the real intention of your statement (you want to assign a value to var, not just to check for a condition), but it is much more error prone (when I typed the line the first time I did an assignment to var and one to val. Daniel says someone suggested the use of functions... Well, yes, sometimes a function would be fine, as in the classical example - I agree that [code="C"]var = max(val1, val2);[/code] is better than [code="C"]var = val1 > val2 ? val1 : val2;[/code] ...But that's hardly the most common case. Now, I know we Perl guys are seen by the rest of the world as bizarre creatures with the strangest sense of code grokking abilities... But I love how Perl allows us to show where emphasis is in our statements. For example, [code="Perl"]$result = 0 unless $success;[/code] shows the reader the important part in this statement is the assignment (which only happens if $success is true), while [code="Perl"]$success or $result = 0;[/code] is semantically equivalent, but puts the reader's attention on the fact we are checking for $success, and the assignment happens as a consequence of that. There is more to programming than letting the computer understand your intentions. Although it is often seen as a write-only language by speakers of other tongues, this level of expresiveness helps reading code. A lot. I happen to like Python quite a bit, but this limits it puts on the programmer always put me off while deciding on using it for a new project. BTW, back to ternary operators: It seems not many Perl programmers use them as often as I do, as for Perl6 there will be a language redesign involving operator Huffman-encoding (this means, the shortest and easiest-to-type operators will be the most common ones)... And the current ternary operator ( ? and : ) will be replaced by a more visible, more lengthy ones ( ?? and :: ) :-(
( categories: )