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.
Alle Beispiel dort sind Zuweisungen, ich sehe kein Beispiel, dass den Operator als if else Ersatz empfiehlt.
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.
ich seh zwar nicht, wo der if Befehl hier etwas zurück gibt, aber na gut.
Für mich ist es auch ein anschauliches Beispiel, warum ich den Operator normlerweise nicht als if else Ersatz benutze, es ist unübersichtlicher weil die Schlüsselwörter fehlen und schwerer zu erkennen was passieren soll.
Perl ist ja eine Programmiersprache, die sich ja an der gesprochenen Sprache orientiert, das erste Beispiel lautet:
wenn 1 wahr ist weise r1 und t den String 'foo' zu, ansonsten weise r1 und f den String 'bar' zu
Das zweite:
wenn 1 wahr ist weise r1 den Rückgabewert der Zuweisung t ist der String 'foo' zu, ansonsten den Rückgabewert der Zuweisung des Strings 'foo' an f
> > 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.
ich sehe nicht das das explizit im Handbuch steht, es steht dort "That should probably be written more simply as:"
> > 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).
wie gesagt ich sehe da keinen Rückgabewert des if Konstrukts, was ergibt den print if() {...};?
Syntaxerror, also kein Rückgabewert.
> > 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. ;-)
Allein schon wie das klingt, ternärer Operator, beim gewöhnlich if else (then gibt's in Perl nicht) weiß man sofort worum es geht.
> > Und will das meinen Programmen auch nicht zumuten.
>
> aha, aber du willst ihnen lieber langsameren code zumuten?
Ja sicher, im Zweifelsfall ziehe ich lesbaren Code, schnellerem vor.
> ich halte fest: der ternaere operator in der verwendung ueber die wir hier reden
> 1. steht im handbuch (ohne negative konnotation),
es steht so nicht im Handbuch, es wird darauf hingewiesen wie man ihn so nutzen könnte, wobei das Beispiel unmittelbar danach den klassischen Gebrauch empfiehlt.
> 2. ist nicht mehr code als if-then-else,
stimm, es ist weniger.
> 3. ist schneller als if-then-else.
aber unlesbarer.
> ...und du bezeichnest das als "missbrauch".
ja, weil der Operator etwas tun soll, was ein einfaches if else nicht tut.
Wobei mich das aber tatsächlich überrascht hat, dass der Operator soviel schneller ist. Ich werde ihn in Zukunft öfters mißbrauchen.
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)