Pregunta

Esta es probablemente una pregunta tonta, pero la curiosidad ha conseguido lo mejor de mí.He estado viendo el código que últimamente parece a "revertir" el orden de las expresiones de los operadores relacionales por ejemplo:

if (0 == someVariable)

A diferencia de lo que normalmente veo/escritura:

if (someVariable == 0)

Para mí, el segundo método parece más legible e intuitiva, así que me pregunto si hay alguna razón por la que estoy viendo el primer método?Lógicamente, ambas afirmaciones evaluar el mismo resultado, por lo tanto, es sólo una cuestión de preferencia personal, cómo está escrito?

¿Fue útil?

Solución

Entiendo que esto es una preferencia personal.Aunque por poner la variable de segundo puede asegurarse de que usted no querer asignar la constante a la variable que se utiliza para concearn c desarrolladores.Esta es probablemente la razón por la que estamos viendo en c# como a los desarrolladores cambiar de idioma.

Otros consejos

No importa el orden, sin embargo, lo anterior implica que s el cero que está comprobando.Convención dicta el uso de la última.

La razón principal de que en C y C++ es que es fácil de escribir

if (someVariable = 0) {
    ...
}

que siempre falla y también se establece someVariable a 0.

Yo personalmente prefiero la variable-primer estilo, ya que lee de la forma más natural, y sólo espero que no te olvides de usar == no =.

Muchos de C y C++ compiladores emitirá una advertencia si se asigna una constante dentro de un if.Java y C# evitar este problema prohibiendo no expresiones booleanas en if cláusulas.Python evita este problema al hacer las asignaciones de una declaración, no una expresión.

El primer método existe como una manera de recordar no hacer las tareas en una instrucción IF, la cual podría tener desastroso consecuencias en algunos lenguajes (C/C++).En C# sólo te mordido por esto si usted está estableciendo valores booleanos.

Potencialmente fatal C código:

if (succeeded = TRUE)
{
    // I could be in trouble here if 'succeeded' was FALSE
}

En C/C++, cualquier variable es susceptible a este problema de VAR = CONSTANTE cuando la intención de VAR == CONSTANTE.Así, es a menudo la costumbre a reordenar su instrucción IF para recibir un error de compilación si flub esto:

if (TRUE = succeeded)
{
    // This will fail to compile, and I'll fix my mistake
}

En C# sólo los valores booleanos son susceptibles a esto, ya que sólo expresiones booleanas son válidos en una instrucción if.

if (myInteger = 9)
{
    // this will fail to compile
}

Así, en el C# mundo no es necesario adoptar la CONSTANTE == VAR estilo, a menos que usted esté cómodo con hacerlo.

Además de la igualdad me vienen a menudo a través de código como

if (0 > number)

o

if (NULL != pointer)

donde no hay ningún peligro de cometer un error en C/C++!Es una de esas situaciones en las que un bien intencionado técnica de enseñanza se ha convertido en un simple mal hábito.

Este último formato es a la izquierda de C-sintaxis, donde, si, inadvertidamente, a la izquierda de uno de los iguales-signos, se hizo una asignación, en lugar de una comparación.

Sin embargo, usted puede, por supuesto, no asignar un literal numérico, así que si usted escribió es como el segundo ejemplo, se obtendría un error del compilador, y no un error.

En C#, sin embargo, usted no puede inadvertidamente hacer esto, así que realmente no importa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top