Unterschiede zwischen If-Anweisung und ternärem Operator ( exp1?exp2:exp3 )
-
Hallo,
kann mir jemand sagen ob es irgendwelche Unterschiede zwischenif( x == true ) { y = 200; } else { y = 300; }
und
( x == true? y = 200: y = 300 );
gibt.
Vieleicht schnellere Abarbeitung oder so was in der Art.
-
kürzerer code:
y=x?200:300;?: kann man verwenden konstanten zu initialisieren:
int const x=foo()?bar():baz();meistens ist aber ein if schöner.
-
das wichtigste ist, das die If Anweisung viel leichter zu lesen ist. Vor allem für alle anderen die diese Abfrage
( x == true? y = 200: y = 300 );
nie benutzen.
Das macht dein Programm etwas verständlicher für die Welt (wobei es auch hier ausnahmen gibt die wohl mit "[code]( x == true? y = 200: y = 300 );[quote]" besser zurechtkommen). Naja ausserdem kann man die If's so schön verschachteln (wo's halt nötig ist).
-
Hallo,
der entscheidene Unterschied ist, dass das if eine Anweisung (statement) und der ternärer Operator ein Ausdruck (expression) ist. Daraus ergeben sich unterschiedliche Anwendungsgebiete, da Anweisungen nicht überall eingesetzt werden können.
An Stellen wo du aber eine Anweisung verwenden kannst, solltest du auch if einsetzen, da dies in der Regel leichter lesbar ist.
Wobei das immer auch ein bischen subjektiv ist.Auf der anderen Seite gibt es Situationen wo du überhaupt keine Wahl hast. In einer Initialisierungsliste sind if-Anweisungen nicht erlaubt und Referenzen und Konstanten müssen in einem Ausdruck initialisiert werden.
In beiden Fällen musst du also den ternären Operator verwenden, wenn du die Bedingung nicht in eine Funktion auslagern möchtest.Chris++ schrieb:
das wichtigste ist, das die If Anweisung viel leichter zu lesen ist. Vor allem für alle anderen die diese Abfrage
( x == true? y = 200: y = 300 );
nie benutzen.
So würde man das wohl auch nicht schreiben. Imo ist ein
int y = x ? 100 : 200;
aber nicht weniger lesbar als:
int y = 0; if (x) y = 100; else y = 200;
Hier hast du nämlich das Problem mit dem sinnvollen Anfangswert. Ich tendiere zwar grundsätzlich auch zu if, bei Initialisierungen verwende ich aber gerne den ternären Operator, weil es nur so eine Initialisierung ist
Auf der anderen Seite ist es in Situationen wo nur der ternäre Operator eingesetzt werden kann häufig sinnvoller gleich eine Funktion zu verwenden (bzw. die Bedingung in einer impliziten Berechnung auszudrücken).