Oh wie kryptisch. Heute nur ein kurzer Beitrag rund ums Thema Rückgabewerte und Code-Optimierung was Lesbarkeit betrifft. Bin letzte Woche eher zufällig mit einem Kollegen über das Thema gestolpert und obwohl es so trivial ist, hat es mich nicht losgelassen. Und zwar geht es um die Wert-Range von false. Was wird eigentlich alles als false im weitesten Sinne interpretiert?
PHP nimmt es bei Wertvergleichen standardmäßig nicht so genau. Die Vergleichs-Operatoren gleich bzw. ungleich (== und !=, oh jetzt kratze ich wirklich an den Basics) sind zunächst ja nicht Typen beeindruckt. Weniger was Lederjacken-Träger angeht, als die Werte von Variablen.
Für ganz Genaue müssen da schon die Operatoren === (Identisch) und !== (Nicht identisch) herhalten. Mit welchen Operatoren man Variablen vergleichen sollte, ist wieder mal Geschmackssache. Ich halte das in der Regel wie folgt: Geht es um einen wichtigen Vergleich - eine Typ-Validierung in einer Setter-Methode beispielsweise - nutze ich die strengen Operatoren. Bei einer unkritischen Abfrage von Rückgabewerten (wie gesagt, sie muss unkritisch sein) bediene ich mich oft bei den Standard-Operatoren.
Und genau bei Rückgabewerten will ich mich einhaken. Es geht um das Thema Lesbarkeit. Wir holen uns mal schnell ein Objekt aus einer Fabrik:
$objekt= $fabrik->neueInstanz();
Nehmen wir mal an, unserer Fabrik gelingt es nicht ein neues Objekt produzieren zu können. Wer übernimmt die Fehlerbehandlung und wirft z.B. eine Exception? Die Fabrik selbst? Denkbar. Meiner Meinung nach (ich denke, das ist fallabhängig zu betrachten) sollten Fabriken recht dumm und simpel sein und sich auf das konzentrieren, was sie können: Neue ObjektInstanzen. Wenn überhaupt sollte ein Exception geschmissen werden.
Was wenn nicht? Was, wenn man auf einen Rückgabewert wie null testen möchte? Man könnte schreiben:
if($objekt == null) { ... }
oder
if($objekt == false) { ... }
Letzteres funktioniert, weil null im Normalfall als false interpretiert wird. Hm. Was noch? Als false wird sonst noch 0 (numerische Null) gewertet. Zahlen größer oder kleiner Null werden als true gewertet, ebenfalls Variablen, die mit gültigen Objekten besetzt sind.
Einer meiner Lieblings-Operatoren ist übrigens NOT. Man könnte also auch schreiben:
if(!$objekt) { ... }
Ach, wie herrlich kurz und präzise das ist. Und zugleich super lesbar - Ich sprech es mal laut nach:
“If not objekt then …”
Dagegen klingen die ausgesprochenen ersten beiden Versuche richtig sperrig: Also ich liebe das. Kurz und knackig - aber wer die Lesbarkeit noch weiter verbessern möchte, kann auch auf eine Wrapper-Variable zurückgreifen:
$objekt_nicht_verfuegbar= (!$objekt);
if($objekt_nicht_verfuegbar) { ... }
Auch sehr gut. Der Vollständigkeit will ich noch erwähnen, das man das natürlich auch mit einer Exception abfangen kann. Was besser ist, muss jeder Entwickler selbst entscheiden, wenn er vor dem Problem sitzt - denn Exceptions müssen nicht zwangsweise sicherer sein als Bedingungs-Abfragen.
Ähnliche Artikel:





