Gibt es einen Unterschied zwischen i == 0 und 0 == i?

7

Erster Code:

%Vor%

Zweiter Code:

%Vor%

Was ist der Unterschied zwischen den Blöcken?

    
Rafik Bari 18.05.2012, 16:32
quelle

8 Antworten

28

Funktionell gibt es keinen Unterschied.
Einige Entwickler bevorzugen das Schreiben des zweiten Formats, um Tippfehler zu vermeiden (falls Sie eine = verpassen), so dass der Compiler vor dem Tippfehler warnt.
Die zweite ist bekannt als Yoda-Bedingung .

Ich sage, dass es keinen Unterschied gibt, denn Sie können sich nicht vor jedem winzigen Detail schützen und sich darauf verlassen, dass der Compiler für Sie laut aufschreien wird. Wenn Sie einen == schreiben möchten, sollten Sie einen == und kein = .
 Die Verwendung des zweiten Formats führt nur zu etwas unklarem, nicht lesbarem Code Auch die meisten Mainstream-Compiler warnen vor der Zuweisung anstelle von Gleichheit Tippfehler durch Ausstrahlung eine Warnung , sobald Sie alle Warnungen aktiviert haben (was Sie sowieso tun sollten).

    
Alok Save 18.05.2012, 16:34
quelle
7

Die zweite Version soll sicherer sein.

Falls Sie ein Gleichheitszeichen vergessen, wird der Wert von i nicht auf Null geändert.

    
Benoît 18.05.2012 16:34
quelle
5

Funktional sind sie in C gleich; Ich bin mir nicht sicher über andere Sprachen, in denen hässliche Dinge wie das Überladen von Operatoren ins Spiel kommen.

Stilistisch ist letzteres extrem kontraintuitiv und persönlich finde ich es extrem hässlich. Der Punkt ist, den Compiler zu veranlassen, einen Fehler zu verursachen, wenn Sie versehentlich = anstelle von == schreiben, aber gute Compiler haben eine Option, Sie davor zu warnen, so dass es unnötig ist.

    
R.. 18.05.2012 16:35
quelle
2

Ja, sie sind gleich, was C # betrifft. Für komplexere Situationen besuchen Sie A == B vs B == A, Was sind die? Unterschiede

    
Lav 18.05.2012 16:35
quelle
2

Für C ++ ist es möglich, obwohl es unwahrscheinlich ist, dass es einen Unterschied geben könnte. Es hängt davon ab, was ich Typ ist. z.B.

%Vor%

Jemand, der solchen Code schreibt, sollte natürlich erschossen werden.

    
Benjamin Lindley 18.05.2012 16:49
quelle
1

Wenn Sie schreiben (0 == i), wird der Fehler der Verwendung eines einzelnen Zeichens aus Versehen (z. B.), wenn (i = 0) eliminiert. Sonst nichts.

    
vrk001 18.05.2012 16:34
quelle
1

Kein Unterschied, manche Leute bevorzugen den zweiten, um den üblichen Fehler zu begehen Zuweisung ( = ) anstelle von Gleichheitstest ( == )

0 = i würde bei der Kompilierung fehlschlagen

    
Pierre 18.05.2012 16:34
quelle
0

In C # gibt es keinen Unterschied. Aber in C ++ gab es einen Unterschied in der Leistung, weshalb Sie beide in C # -Code in diesen Tagen verwendet sehen - eigentlich denke ich an i ++ vs ++ i über Leistung - 0 == i ist eine gängige Codierung Empfehlung in C / C ++ zu vermeide i = 0 als versehentliche Operation

    
Richard Blewett 18.05.2012 16:34
quelle

Tags und Links