2012-05-18 18 views
7

Duplicar posible:
A==B vs B==A, What are the differences¿Hay alguna diferencia entre i == 0 y 0 == i?

primer código:

if(i==0) {// do instructions here} 

segundo código:

if(0==i) { // do instructions here } 

¿Cuál es la dife rence entre los bloques?

+7

Uno no tendrá que pasar el tiempo depurando porque olvidó un '='. – alex

+0

... en el contexto de qué idioma? –

+3

Al menos está a salvo del problema 'if (i = 0) {}' si está usando C#, ya que esa sintaxis es ilegal. –

Respuesta

28

Funcionalmente, no hay diferencia.
Algunos desarrolladores prefieren escribir el segundo formato para evitar errores tipográficos de asignación (en caso de que pierda un =), de modo que el compilador advierte del error tipográfico.
El segundo es conocido como Yoda Condition.

Yoda Condition

digo que no hay diferencia porque, no se puede proteger a sí mismo contra todos los detalles minúsculos y se basan en el compilador de gritar en voz alta por you.If tiene la intención de escribir una == que debe esperar a sí mismo a escribir == y no un =.
Usar el segundo formato solo lleva a un código oscuro no legible.
Además, la mayoría de los compiladores de corriente advierten de la asignación en lugar de la igualdad errata por emitting an warning una vez que active todas las advertencias (que debe de todos modos).

+3

Es una lástima que no pusieron un bloqueo histórico en la [pregunta de la jerga] (http://stackoverflow.com/questions/2349378/new-programming -jargon-you-acuñado) –

+0

+1 para Yoda Condition & Pokemon Exception Handling. Nunca escuché esos términos antes. –

+0

@ConradFrix: no solo lo bloquearon, sino que se eliminó y ahora solo 10k + usuarios pueden verlo. –

7

Se supone que la segunda versión es más segura.

En caso de que olvide un signo igual, no cambia el valor de i a cero.

0

En C# no hay diferencia. Sin embargo, en C++ hubo una diferencia en el rendimiento y es por eso que en estos días se usan tanto en el código C#. En realidad, estoy pensando en i ++ vs ++ i sobre el rendimiento. 0 == i es una recomendación de codificación común en C/C++ para evite i = 0 como una operación accidental

1

Cuando escribe (0 == i) se elimina el error de usar un signo igual por error (por ejemplo) si (i = 0). Nada más.

1

ninguna diferencia, algunas personas prefieren el segundo para coger el error común de hacer asignación (=) en lugar de la prueba de la igualdad (==)

0 = i fallaría en la compilación

5

Funcionalmente, son el lo mismo en C; No estoy seguro de otros idiomas en los que cosas feas como la sobrecarga de operadores entran en juego.

Estilísticamente, este último es extremadamente contra-intuitivo y personalmente me parece extremadamente feo.El punto es hacer que el compilador arroje un error cuando accidentalmente escribes = en lugar de ==, pero los buenos compiladores tienen la opción de advertirte sobre esto de todos modos, así que es innecesario.

+1

¡La sobrecarga del operador es hermosa! (Cuando se aplica correctamente.) Esa es una de las cosas que me encanta de C++, una y otra vez. – leemes

2

Para C++, es posible, aunque poco probable, que pueda haber una diferencia. Depende de qué tipo de letra sea yo. p.ej.

struct Foo 
{ 
    int x; 
}; 

bool operator==(Foo lhs, int rhs) 
{ 
    return lhs.x == rhs; 
} 

bool operator==(int lhs, Foo rhs) 
{ 
    std::cout << "Hi!"; 
    return true; 
} 

Por supuesto, una persona que escribe un código como ese debe tomarse.

Cuestiones relacionadas