2010-03-09 7 views
5

siempre he escrito mis expresiones booleanas como esto:¿Cuál es la mejor forma de escribir expresiones booleanas en Java

if (!isValid) { 
    // code 
} 

Pero mi nuevo empleador insiste en el siguiente estilo:

if (false == isValid) { 
    // code 
} 

Es uno ¿estilo preferido o estándar?

+5

Guau, otra pregunta para los posibles empleadores. (La comparación explícita con las constantes booleanas es tonta.) – Pointy

+5

Diría que la segunda es preferible ....... si y solo si usted es un ofuscador de código –

+3

Si bien prefiero la primera, probablemente quiera seguir con el estándar de su empleador – basszero

Respuesta

10

Prefiero el primer estilo porque es más natural para mí leerlo. Es muy raro ver el segundo estilo.

Una de las razones por qué algunas personas pueden preferir el segundo sobre otra alternativa:

if (isValid == false) { ... } 

es que con esta última accidentalmente escribe una sola = en lugar de == entonces usted está asignando a isValid en lugar de probar, pero con la constante primero obtendrá un error de compilación.

Pero con su primera sugerencia, este problema ni siquiera es un problema, por lo que este es otro motivo para preferir el primero.

+0

En realidad, no hay error de compilación para ese error si isValid es una variable (a menos que isValid sea final). Que es realmente, * realmente * malo. Obviamente, es menos problemático si se trata de un método o una expresión válidos, pero como un hábito ... – Carl

+2

Creo que esa es la razón de la inversión del pedido. "if (false = isValid)" es un error. – DJClayworth

2

IMO el primero es mucho más legible mientras que el segundo es más detallado.

yo sin duda ir a por el primero uno

+0

+1 para legibilidad. –

4

Fue discussed para C# hace varias horas.

El constructo false == isValid es un remanente de C-world, donde el compilador le permite hacer asignaciones en la declaración if. Creo que los compiladores de Java te advertirán en ese caso.

En general, la segunda opción es demasiado detallada.

+0

La asignación booleana en una expresión no me presenta ningún error o advertencia del compilador en Eclipse. – Carl

+0

La asignación booleana general no lo hace, pero un intento de asignar un valor a la constante incorporada 'falso' sí lo hace, de ahí el orden. En los viejos códigos C (y digo VIEJO) FALSO era típicamente una variable asignada y podría sobrescribirse. – DJClayworth

2

Está evaluando la variable, no false, por lo que esta última no es correcta desde la perspectiva de la legibilidad. Entonces me quedaría con la primera opción.

1

El segundo estilo no requiere que usted anule la expresión usted mismo (lo cual puede ser mucho más complicado que solo "isValid"). Pero escribir "isValid == false" puede llevar a una asignación involuntaria si olvida escribir dos = 's, por lo tanto, la expresión idiomática es poner en el lado derecho lo que no puede ser un valor.

El primer estilo parece ser el preferido entre las personas que saben lo que están haciendo.

8

Absolutamente el primero. El segundo revela una falta de comprensión de la naturaleza de las expresiones y los valores, y como parte del estándar de codificación, implica que el empleador espera contratar programadores muy incompetentes, lo que no es un buen augurio.

+0

Me estás matando. Pero al menos significa que no estoy loco. – Timothy

7

Todo el mundo reconoce este fragmento:

if (isValid.toString().lenght() > 4) { 
    //code 
} 

Creo que su segundo ejemplo se ve en la misma dirección.

+0

¿evitar la ofuscación? – Timothy

2

Voy a intentar una respuesta completa aquí que incorpora todas las respuestas anteriores.

El primer estilo es, sin duda a ser preferido por las siguientes razones:

  • es más corto
  • es más fácil de leer, y por lo tanto más fácil de entender
  • que es el más utilizado, lo que significa que los lectores reconocerán el patrón más rápidamente
  • "falso == ..." en lugar de "... == falso" es otra violación del orden natural, lo que hace pensar al lector "¿hay algo extraño sucediendo que yo necesita prestar atención a ", cuando no hay.

La única excepción a esto es cuando la variable es un booleano en lugar de un booleano. En ese caso, el segundo es una expresión diferente de la primera, evaluando a falso cuando isValid es nulo y cuando es Boolean.FALSE. Si este es el caso, hay buenos argumentos para usar el segundo.

0

sólo quiero decir que aprendí C hace veinte años en la escuela y tienen de pasar a Perl y Java y C# ahora, que todos tienen la misma sintaxis y ...

Creo que (! Mivar) es el más populares

pienso (mivar == false) está bien demasiado

en 20 años nunca he visto incluso

(false==myvar) 

Creo que su jefe está fumando algo-- estoy Lo siento, pero tomaría esto como una señal de que su jefe es una especie de fanático del control o idiota.

Cuestiones relacionadas