Hallo zusammen, diese Woche möchte ich einen kleinen Eintrag über die sogenannten „ternären Operatoren“ schreiben.
Ich vermute viele Entwickler benutzen diese, ohne den Namen überhaupt je gehört zu haben! Steigen wir also direkt ein…

Was sind „ternäre“ Operatoren?

Prinzipiell gibt es in der Entwicklung drei Arten von Operatoren:

  • Unäre Operatoren sind Operatoren, die nur mit einem Wert umgehen können. Zum Beispiel ! (der Verneinungsoperator) oder ++ (der Inkrementoperator).
  • Binäre Operatoren können dagegen mit zwei Werten umgehen (hiervon gibt es die meisten). Unter anderem == (ist gleich), != (ist ungleich), < (ist kleiner als), …
  • Ternäre Operatoren benutzen einen Ausdruck (oder auch eine Bedingung) um zwischen zwei weiteren zu wählen – Das sieht dann in etwa so aus:
    $ergebnis = ($bedingung) ? $wert1 : $wert2;

Den ternären Operator kann man also ähnlich wie eine if-Abfrage benutzen.

Was hat das mit „abkürzen“ zutun?

Um zu verdeutlichen wie ein ternärer Operator Code reduzieren kann, möchte ich zuerst eine einfache Funktion als Beispiel nehmen:

function is_bigger_than_ten ($int)
{
   if ($int > 10)
   {
      return true;
   }

   return false;
}

Diese Funktion kann man mit Hilfe der ternären Operatoren noch etwas verkürzen:

function is_bigger_than_ten ($int)
{
   return ($int > 10) ? true : false;
}

Kleines Schmankerl: da Bedingungen ohnehin einen booleschen Wert zurückliefert, geht es sogar noch kürzer 🙂

function is_bigger_than_ten ($int)
{
   return ($int > 10);
}

Weitere Formen

Seit PHP 5.3 gibt es eine weitere -noch kürzere- Schreibweise für ternäre Operatoren:

if ($x)
{
   $wert = $x;
}
else
{
   $wert = $y;
}

// Ist das gleiche wie...
$wert = $x ? $x : $y;


// Ist das gleiche wie (ab PHP 5.3)...
$wert = $x ?: $y;

Bei dieser Nutzung sollte man allerdings damit vertraut sein, wie die entsprechende Programmiersprache auf „Leerwerte“ reagiert – Diese sollte man unbedingt kennen, bevor man anfängt sie einzusetzen! Für meine Beispiele habe ich PHP gewählt, hier ist es möglich diverse Werte als boolesch falsch zu werten (sofern wir nicht auf Typen-gleichheit (=== oder !==) prüfen): false, 0, '0', null, array() (leeres Array), '' (Leerstring), …
In Javascript dagegen sind es unter anderem folgende Werte: false, 0, '0', [] (leeres Array), '' (Leerstring), new Number() (weil identisch zu 0), new String() (weil identisch zu ''), …

Also nicht vergessen: Kurzer Code ist zwar schön, sollte jedoch ebenso getestet werden wie jeder andere – Vor allem wenn man nicht explizit auf die Datentypen prüft! Durch die Typen-gleichheit wird der Code „strenger“ und sehr viel sicherer!
Test-Frameworks wie PHPUnit oder QUnit können uns zwar helfen unsere Applikationen zu testen, sind aber gleichzeitig ziemliche Zeitfresser… Doch das ist nicht mein heutiges Thema 😉

Mit diesen Worten möchte ich für Heute auch schon wieder abschließen und euch allen eine angenehme Woche und natürlich das obligatorische „Happy Coding“ wünschen!

2 comments on “Basics: Ternäre Operatoren und sonstige Abkürzungen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.