seth: Konditionaloperator

Beitrag lesen

gudn tach!

im perl-manual wird ja sogar explizit gesagt, wie man es "missbraucht".

wird es?

es wird gezeigt, dass man auf die klammernsetzung achten muss. es wird nirgends auch nur angedeutet, dass diese art der benutzung schlecht waere.

mir geht es darum, dass damit unötigerweise ein Rückgabewert verworfen wird

ach ja?

#!/usr/bin/perl -w  
use strict;  
my ($t, $f, $r1, $r2);  
  
if(1){  
  $r1 = $t = 'foo';  
}else{  
  $r1 = $f = 'bar';  
}  
print $r1."\n"; # prints 'foo'  
  
$r2 = (1) ? ($t='foo') : ($f='bar');  
print $r2."\n"; # prints 'foo'

es kann also in beiden faellen was zurueckgegeben werden.

man kann ja mit Perl fast alles

in diesem punkt sind wir uns zwar einig, ich halte es jedoch erst recht wegen der kettensaegen-eigenschaft von perl fuer falsch, etwas wie das benutzen des ternaeren operators, was ja sogar explizit im handbuch steht, als "missbrauch" zu bezeichnen.

Ob das tatsächlich ein Nachteil ist, den Rückgabewert zu verwerfen, weiß ich nicht,

afais wird da gar nicht mehr verworfen als beim gewoehnlichen if-then-else (siehe obiger code).

aber ich tue nicht gerne, was ich nicht muss.

so geht's mir auch, deswegen verwende ich so gerne den ternaeren operator, weil ich ja nicht das gewoehnliche if-then-else benutzen muss. ;-)

Und will das meinen Programmen auch nicht zumuten.

aha, aber du willst ihnen lieber langsameren code zumuten?
der ternaere operator scheint naemlich etwas schneller zu sein als das gewoehnliche if-then-else. ich konnte in einigen benchmarks mittels des moduls "Benchmark" jetzt zwar nichts genaues eruieren, aber das gewoehnliche if-then-else war - wohlgemekrt: ohne die explizite rueckgabe - _immer_ mind. 10% langsamer. die grossen schwankungen (teilweise waren's sogar ueber 50%) zeigen jedoch auch, dass meine cpu da an ihre mess-grenzen stoesst, wenn der kram ca. 1e6 mal pro sekunde ausgefuehrt werden kann.

ich halte fest: der ternaere operator in der verwendung ueber die wir hier reden
1. steht im handbuch (ohne negative konnotation),
2. ist nicht mehr code als if-then-else,
3. ist schneller als if-then-else.
...und du bezeichnest das als "missbrauch".

prost
seth