2012-10-10 23 views
10

Lo siento si el título es bastante ambiguo, no estaba seguro de cómo decirlo.¿Las condiciones deberían ser positivas o negativas?

¿Es mejor expresar una condición tal que el resultado que no desea entre en la instrucción if luego salga de la función o debería probar el resultado que quiero y seguir la declaración con mi código.

Quizás algunos ejemplos ayudaría:

Lo que quiero decir mediante pruebas de resultado negativo:

if(myObject == null) { 
    return; 
} 

//do whatever with myObject 

Lo que quiero decir mediante pruebas de resultado positivo:

if(myObject != null) { 
    //do whatever with myObject 
} 

En este momento, si alguien puede decirlo mejor que yo, por favor hazlo.

+0

Si no hay más, ambas declaraciones significan algo diferente. Si hubiera otro, uno esperaría que el compilador fuera lo suficientemente bueno para optimizar la comparación más rápida. – Eduardo

+0

Esta es una pregunta realmente buena y creo que debería haber una respuesta definitiva. Personalmente, creo que las condiciones positivas son más rápidas de leer y comprender, pero esperaba que hubiera un estudio para probar esto de una manera u otra. – Ken

Respuesta

7

Personalmente prefiero el primer método para verificar si el objeto es nulo y luego regresa inmediatamente. Permite que el "código real" permanezca sin defectos, lineal y puede evitar muchas sentencias if anidadas, que me parecen más legibles. De lo contrario, ambas formas son válidas y tendrán el mismo resultado. Elija el que mejor se adapte a su situación (que puede depender de cualquier otra cosa o de las declaraciones).

He aquí un buen ejemplo:

if (object1 == null) { 
    return; 
} 
// do some stuff 
if (object2 == null) { 
    return; 
} 
// do some stuff 
if (object3 == null) { 
    return; 
} 

contraposición a:

if (object1 != null) { 
    // do some stuff 
    if (object2 != null) { 
     // do some stuff 
     if (object3 != null) { 
      // do some stuff 
     } 
    } 
} 

encuentro el primer para ser mucho más legible.

+0

¿Es readble importante que la velocidad del compilador? solo preguntando? También soy nuevo en estos –

+1

En este caso, la mejora de velocidad, si la hay, es insignificante. La legibilidad es, en mi opinión, más importante. Además, primero escriba el código, pruébelo y optimícelo más tarde. No tiene sentido optimizar algo que ya es lo suficientemente rápido y solo hace que tu código sea menos legible. – monoxygen

0

Cuando hay una acción válida que se puede tomar para satisfacer una condición positiva, como registrar que un conjunto de resultados está vacío o que no se asignó una variable, entonces es mejor usar condiciones positivas. Las API pueden ser útiles aquí, como Apache Commons StringUtils isNotBlank(), cuando está probando cadenas. Sin embargo, a veces lo más claro es realizar una prueba negativa, por ejemplo, solo permitiendo que el proceso proceda donde una variable no es nula.

Cuestiones relacionadas