2013-07-10 8 views
7

Ich sehe oft, wenn Strukturen wie folgt codiert werden:Warum Constant zuerst in einer if Bedingung

if (true == a) 
if (false == a) 

Warum setzen sie den konstanten Wert erste und nicht die Variable? wie in diesem Beispiel:

if (a == true) 
if (b == true) 
+6

[Yoda Bedingungen] (http://en.wikipedia.org/wiki/Yoda_Conditions) –

+0

Warum zu 'C' in Auftrag gegeben Ich wurde verwirrt :( –

+2

@GrijeshChauhan das gleiche Gesetz funktioniert auch auf C.Putting Konstante auf der linken Seite Vergleichsoperator ist gut und vermeidet zufällige Zuweisungen –

Antwort

14

Dies wird Yoda-Syntax oder Yoda-Bedingungen genannt.

Es wird verwendet, um versehentliche Zuweisungen zu verhindern.

Wenn Sie ein Gleichheits vergessen unterzeichnen wird es

if(false = $a) nicht

if($a = true) den Wert von true auf die Variable $a ordnet und bewertet als true

Die Wordpress Coding Standards Erwähnung dies ausdrücklich nicht kompilieren:

if (true == $the_force) { 
    $victorious = you_will($be); 
} 

Wenn Sie logische Vergleiche durchführen, setzen Sie die Variable immer auf die rechte Seite Seite, Konstanten oder Literale auf der linken Seite.

In dem obigen Beispiel, wenn Sie ein Gleichheitszeichen (gebe es zu, es sogar die erfahrensten von uns geschieht) auslassen, werden Sie einen Parser-Fehler erhalten, weil Sie auf eine Konstante nicht zuordnen können, wie wahr. Wenn die Anweisung andersherum wäre ($ the_force = true), wäre die Zuweisung perfekt gültig und gibt 1 zurück, was dazu führt, dass die if-Anweisung auf wahr auswertet, und Sie könnten diesen Fehler eine Weile verfolgen.

Ein wenig bizarr ist es, zu lesen. Gewöhne dich daran, du wirst es tun.

+0

Vielen Dank für das schnelle Antwort! Jetzt weiß ich endlich, warum das so gemacht wird :) –

+3

Obwohl es gut ist, Tippfehler zu vermeiden, wird es an Lesbarkeit mangeln. –

+0

"Ja, nun, das ist nur deine Meinung, Mann." - Seine Dudeness alias El Duderino – user20232359723568423357842364

-2

Dies ist ein Beispiel für YODA Style Kodierung

if (var a == true){ 
} 

weniger ist sicherer als

if (true == var a){ 
} 

, denn wenn man die zweite = Marke vergessen, einen ungültigen Zuordnungsfehler erhalten werden, und kann es bei kompilieren Zeit fangen.

+4

Sie meinen, die zweite ist sicherer richtig. –

+2

@Sankalp Mishra Bitte lesen Sie Ihre Antwort erneut. Ich bin sicher, dass Sie erfahren werden, wo Sie bearbeiten können. –