Logikfrage zu der "Bedingung ? Wahr : Falsch" Synthax?
$xNeTworKx
- perl
Hola,
Ich habe eigentlich dauernd das Problem, dass die "Bedingung ? Wahr : Falsch" Syntax bei mir nicht funktioniert.
zB (getestet)
if ($breite > $hoehe) {
$faktor = $breite / 100;
} else {
$faktor = $hoehe / 100;
}
funktioniert.
($breite > $hoehe) ? $faktor = $breite / 100 : $faktor = $hoehe / 100;
funktioniert nicht, aber wieso?
$xNeTworKx.
Übrigens funktioniert es auch nicht, wenn ich das > umdrehe, also <.
Was genau nicht funktioniert ist, dass der Faktor immer falsch berechnet wird. Der Faktor soll je nach der größeren Angabe berechnet werden. In diesem Fall war die Breite größer, aber Perl berechnet mit dem 2. Beispiel den Faktor aus der Höhe, wie kann das sein?
Danke schon mal im Vorraus.
$xNeTworKx.
use Mosche;
($breite > $hoehe) ? $faktor = $breite / 100 : $faktor = $hoehe / 100;
$faktor = (($breite > $hoehe) ? $breite : $hoehe) / 100
use Tschoe qw(Matti);
Hola,
$faktor = (($breite > $hoehe) ? $breite : $hoehe) / 100
Hui, das ging schnell. Auf jeden Fall klappt es, danke. Es würde mich noch zusätzlich interessieren, was der Fehler bei meiner Angabe war. Ich habe es zwar nicht so effizient notiert, aber im Grunde sollte doch das Gleiche rauskommen, nur das tut es nicht. Weißt du warum?
$xNeTworKx.
Moin!
Ich habe eigentlich dauernd das Problem, dass die "Bedingung ? Wahr : Falsch" Syntax bei mir nicht funktioniert.
Du mußt es richtig anwenden... :)
if ($breite > $hoehe) {
$faktor = $breite / 100;
} else {
$faktor = $hoehe / 100;
}
funktioniert.($breite > $hoehe) ? $faktor = $breite / 100 : $faktor = $hoehe / 100;
funktioniert nicht, aber wieso?
Der ?:-Operator liefert dir einen Wert zurück. Der Operator ist wie eine Funktion zu verwenden.
Dein Beispiel würde sich funktionsfähig ergeben als:
$faktor = ( ($breite>$hoehe) ? $breite/100 : $hoehe/100 );
Die Einklammerungen mache ich gewohnheitsmäßig. Die Klammer ganz außenrum sichert, dass nur der enthaltene Ausdruck wirklich ausgewertet wird (insbesondere wären in komplexeren Ausdrücken ansonsten Anfang und Ende schwer abgrenzbar). Und die Klammer um Wahrheits-Vergleiche mache ich auch automatisch.
Der ?:-Operator kann in komplexeren Ausdrücken verwendet werden!
Beispiel:
$faktor = $faktor * ($test<10?5:2);
Dieser Ausdruck multipliziert $faktor mit einem zweiten Wert. Ist $test kleiner als 10, wird mit 5 multipliziert, andernfalls mit 2.
Der ?:-Operator kann auch verschachtelt werden.
Mit diesem Operator kann man sich aufwendige if-Verschachtelungen wesentlich einfacher machen, wenn diese tatsächlich zur Vereinfachung geeignet sind. Insbesondere wenn man klassisch vor einer Berechnung diverse Abfragen macht, um Werte vorzudefinieren, ist der ?:-Operator eine gute Alternative.
- Sven Rautenberg
Hi,
zum Thema wurde ja schon alles gesagt...
cu,
Andreas