Yoda Conditions

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Yoda Conditions (auch: Yoda Notations) bezeichnen im Programmierjargon eine Form der Quelltextformatierung für bedingte Anweisung, bei der die beiden Seiten der Bedingung vertauscht werden. Die Bezeichnung für diesen Programmierstil leitet sich aus der Figur Yoda aus dem Star-Wars-Universum ab, der dazu neigte, einige Wörter innerhalb eines Satzes zu vertauschen.[1]

Beispiel[Bearbeiten]

Gewöhnlicherweise schreiben Programmierer eine Bedingung, in diesem Fall eine bedingte Anweisung, so aus:

if (wert == 52) { /* ... */ }
// Liest sich wie: Wenn Wert gleich 52...

Yoda Conditions bezeichnen nun die umgekehrte Stellung des Ausdruckinhalts:

if (52 == wert) { /* ... */ }
// Liest sich wie: Wenn 52 gleich Wert...

Bei diesem Programmierstil werden demnach zuerst die Konstanten aufgeführt und danach der variable Vergleichswert. Analog zur Aussprache des Namensgebers Yoda („Vergessen du musst was früher du gelernt“) führt dies zu einer seltsam anmutenden Aussprache der Kondition: „Wenn 52 gleich wert ist …“.

Vorteil[Bearbeiten]

Das Vertauschen der beiden Bedingungswerte ändert nichts am Verhalten des Programms. Obwohl sich für den Programmierer diese Kondition schlechter lesen lässt als das erste Beispiel, hat diese Anwendung in denjenigen Programmiersprachen, die eine Wertzuweisung mittels „=“ in einem Ausdruck erlauben, den Vorteil, den Flüchtigkeitsfehler, aus der Kondition eine Variablenzuweisung zu machen, auszuschließen:

if (wert = 52) { /* ... */ }
// Ist (unbeabsichtigt vom Programmierer) immer wahr und ändert den Inhalt von wert

if (52 = wert) { /* ... */ }
// Erzeugt einen Syntaxfehler

Das untere Beispiel verhindert den Flüchtigkeitsfehler, da während der Laufzeit oder beim Kompilieren ein Fehler ausgegeben bzw. erzeugt wird: 52 ist eine Konstante; dieser kann kein Wert zugewiesen werden[2].

In manchen Sprachen kann so auch die ungültige Dereferenzierung eines Nullwerts vermieden werden:

String wert = null;
if (wert.equals("foobar")) { /* ... */ }
// In Java wird hier eine NullPointerException geworfen

if ("foobar".equals(wert)) { /* ... */ }
// Ist (wie erwartet) immer falsch

Kritik[Bearbeiten]

Kritiker des Notationsstils sehen die mangelhafte Lesbarkeit als überwiegenden Nachteil an, der das vermeintliche Problem des oben beschriebenen Flüchtigkeitsfehlers nicht aufwiegt. Dabei wird angeführt, dass moderne Entwicklungsumgebungen diese Zeile als möglichen Fehler markieren. Manche Programmiersprachen erlauben zudem eine Variablenzuweisung innerhalb einer Kondition ohnehin nicht.[3] In der Programmiersprache D haben Zuweisungen keinen Booleschen Datentyp und können somit nicht als if-Kriterium verwendet werden.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. debuggen du musst – Yoda Conditions in PHP. 10. Mai 2010, abgerufen am 22. September 2011 (deutsch).
  2. Nils Langner: Yoda Conditions. 26. Juli 2010, abgerufen am 22. September 2011 (deutsch).
  3. Why Yoda conditions are bad and usage of Java’s ‘final’ keyword is good. 15. Mai 2011, abgerufen am 22. September 2011.