Sven Rautenberg: ternaerer operator

Beitrag lesen

Moin!

Doch. Man kann die Ausdrücke auch so gestalten, dass sie wiederum den Trinitätsoperator verwenden. Das wird dann aber auch schnell unübersichtlich.

wie sieht das dann aus?

Der Trinitätsoperator ist am besten immer in eine Klammer gesetzt - das grenzt ihn gut gegen andere Bestandteile von Ausdrücken (z.B. Rechnungen oder Stringverkettungen) ab.

(bedingung ? wenn_erfüllt : wenn_nicht_erfüllt)
ist das "normale" if und else...

Und eine andere Form gibt es beim Ternären Operator auch nicht.

und mit elseif wie sähe das aus?

(bedingung1 ? wenn_1_erfüllt : bedingung2 ? wenn_2_erfüllt : wenn_1_2_nich_erfüllt)

so?

Nein.

Mal als anschauliches Beispiel die Mehrwertsteuerumstellung:
$mwst = (date('Y')>2006 ? 0.19 : 0.16);

Da definierst du sozusagen eine Funktion, die in Abhängigkeit von einer bedingung den einen oder den anderen Funktionswert zurückliefert - in diesem Fall konstante Werte.

Erweitern wir das Beispiel noch um eine Abfrage, ob der normale oder der ermäßigte Mehrwertsteuersatz zu zahlen ist:
$mwst = (ermaessigt($produkt)? 0.07 : 0.16 );

Die Funktion ermaessigt kriegt das Produkt und sagt (mit true oder false), ob der ermäßigte Steuersatz fällig wird. Der normale Steuersatz steht hier erstmal fix mit 16% drin.

Beides kombiniert:
$mwst = (ermaessigt($produkt)? 0.07 : (date('Y')>2006 ? 0.19 : 0.16) );

Würde sich der ermäßigte Steuersatz auch irgendwann ändern, könnte man natürlich statt der fixen 0.07 auch dort einen ternären Operator einpflanzen.

Aber wie erwähnt: Diese Verkettungen sind bei mehreren Ebenen irgendwann nicht mehr leicht durchschaubar, solch ein Code wird recht schnell unwartbar.

- Sven Rautenberg

--
"Love your nation - respect the others."