10 Mai 2010

debuggen du musst - Yoda Conditions in PHP

stackoverflow.com hat bei seinen Lesern mal nach typischem Programmierer-Jargon gefragt und die ein oder andere erheiternde Antwort erhalten. Eine schöne Zusammenfassung findet sich z.B. in diesem Post auf globalnerdy.com. Einen Begriff, nämlich den der "Yoda Condition" möchte ich hier mal herausgreifen: In einer condition, in der eine Konstante mit einer Variablen vergleicht, schreibt man nun nicht if ( var == const ) sondern if ( const == var ), was natürlich an falschen Satzbau erinnert - somit passt der Name "Yoda Condition" wie die Faust aufs Auge. Was nach schlechtem Stil klingt, hat jedoch durchaus seine Berechtigung und ist somit eigentlich der bessere Stil, es hilft nämlich, einen beliebten Tippfehler zu finden. Tippt man in Sprachen mit C-Syntax nämlich fälschlich statt dem Vergleichsoperator == ein = in die condition, passiert nämlich nicht das Erhoffte und dieser beliebte Fehler hat sicherlich hier und da schon mal zu Kopfzerbrechen und Haareraufen geführt.
Ich versuche im Folgenden mal den Vorteil einer Yoda Condition mit Hilfe von PHP zu verdeutlichen:
Vertippt man sich in der condition nicht, ist es egal, ob man die Variable mit der Konstanten oder umgekehrt vergleicht.

führt ebenso wie

zur Ausführung des Codeblocks, wenn denn $var tatsächlich 5 ist. Vertippe ich mich jedoch beim Vergleichsoperator, ist die condition wahr und der Codeblock wird ausgeführt, auch wenn ich das überhaupt nicht will:

Schlimmer noch, wenn ich durch den Fehler sogar die Variable verändere, die ich eigentlich nur überprüfen will. Debuggen wird da bei komplizierterem Code evtl. unnötig schwer. Gewöhne ich mir
stattdessen Yoda Conditions an, also etwa so:

meckert PHP zu Recht mit einem Parse error: syntax error, unexpected '=' in [...] und der Fehler fällt sofort ins Auge.

Was also wie komischer Stil aussieht, durchaus seinen Sinn es hat.

(Bild von drumecho auf flickr.com, CC-Lizenz)

Labels: , ,

1 Comments:

At 20:36, Blogger wingi said...

Die yoda condition ist auch in java sinnvoll - bei den beliebten null-String-Checks.

Statt "if (myString != null && myString.equals(“yes”))" kann man auch "if (“yes”.equals(myString))" schreiben. Weiteres auch in meinem Blog united-coders.com.

 

Kommentar veröffentlichen

<< Home