2010-11-26 15 views
13

cuál es mejor en Java código style?boolean checking if()

boolean status = true; 
if(!status) { 
    //do sth 
} else { 
    //do sth 
} 

o

if(status == false) { 
    //do sth 
} else { 
    //do sth 
} 
+0

'interruptor (estado) {case cierto: {...; descanso; } defecto: { ...; descanso; }} ':) – tchrist

+0

@tchrist: ... ¿y tu punto es? – missingfaktor

+0

switch (booleano) es incorrecto, Boolean no puede estar en el switch – ashishdhiman2007

Respuesta

17

Previamente, por supuesto. Último es redundante, y solo demuestra que no has entendido muy bien el concepto de booleanos.

Una sugerencia más: Elija un nombre diferente para su variable boolean. Como por this Java style guide:

es prefijo debe utilizarse para las variables y métodos booleanos.

isSet, isVisible, isFinished, isFound, isOpen

Esta es la convención de nomenclatura para boolean métodos y variables utilizadas por Sun para los paquetes principales de Java.

Al utilizar el prefijo is resuelve un problema común de elegir nombres malos booleanos como status o flag. isStatus o isFlag simplemente no encaja, y el programador se ve obligado a elegir más nombres significativos .

métodos setter para boolean las variables deben haber establecido prefijo como en:

void setFound(boolean isFound);

Hay algunas alternativas al is prefijo que encaja mejor en algunas situaciones . Estos son has, can y should prefijos:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false; 
+0

Pruebe 'good_status' o' fair_weather_status' o 'status_known' o' status_unknown' o incluso 'status_malus__vana_salus__semper_dissolubilis'. :) – tchrist

4

El anterior. Este último simplemente agrega verbosidad.

0

Esto es más legible y buena práctica también.

if(!status){ 
//do sth 
}else{ 
//do sth 
} 
+0

excepto que cambiaría las cláusulas que acaba de probar si (estado) –

+0

Además, podría reformular el nombre de la variable con un prefijo "is-" para indicar cuál es el valor predeterminado es. –

6

La primera de ellas, o if (status) { /*second clause*/ } else { /* first clause */ }

EDITAR

Si realmente se desea que la segunda forma, entonces if (false == status) <etc>, mientras más feo, es probablemente más seguros (errores tipográficos WRT).

+0

+1 para (falso == estado), que también proporciona una guía para la pregunta 'if (0 == i)' no solicitada – subsub

22

Yo sugeriría que lo haga:

if (status) { 
    //positive work 
} else { 
    // negative work 
} 

Los == pruebas, mientras que, obviamente redundante, también corren el riesgo de una sola = errata que daría lugar a una asignación.

+2

+1 para señalar el peligro de escribir erróneamente una sola "=" – RAY

+1

+1 de mi parte para intercambiando el lugar de la lógica positiva y negativa. – Mudassir

3

El primero. Pero sólo otro punto, el siguiente también haría que el código sea más legible:

if (!status) { 
    // do false logic 
} else { 
    // do true logic 
} 

Nota que hay espacios adicionales entre if y la (, y también antes de la declaración else.

EDITAR

Como señaló @Mudassir, si hay NO otro código compartido en el método que utiliza la lógica, entonces el mejor estilo sería:

if (!status) { 
    // do false logic 
} 

// do true logic 
+0

@Downvoter - ¿Te gustaría comentar? –

+0

Sí, rechacé su respuesta. Pero no es personal. – Mudassir

+1

@Mudassir * suspiro * ... –

8

Si nos fijamos En las alternativas de esta página, por supuesto, la primera opción se ve mejor y la segunda es más detallada. Pero si está mirando una clase grande que alguien más escribió, esa verbosidad puede marcar la diferencia entre darse cuenta de inmediato de lo que el condicional está probando o no.

Una de las razones por las que me alejé de Perl es porque depende mucho de la puntuación, que es mucho más lenta de interpretar mientras se lee.

Sé que estoy en la lista de votantes aquí, pero casi siempre me pondré de lado con un código más explícito para que otros puedan leerlo con mayor precisión. Por otra parte, nunca usaría una variable booleana llamada "estado" tampoco. Tal vez es un éxito o simplemente un éxito, pero el "estado" es verdadero o falso, no significa nada para el lector casual de manera intuitiva. Como puede ver, estoy muy interesado en la legibilidad del código porque leo tanto código que otros han escrito.

+0

+1 para elegir la claridad sobre la astucia – RAY

+0

Bueno. +1 de mi parte – Mudassir

+0

de acuerdo con 'status' es un nombre horrible, pero'! S' es idiomático en los idiomas derivados de C para la prueba de falso capó. – lijie

1

El primer estilo es mejor. Aunque debería usar mejor nombre de variable

3

Realmente también depende de cómo nombre su variable.

Cuando las personas preguntan "cuál es la mejor práctica", esto implica implícitamente que ambas son correctas, por lo que es solo una cuestión de lo que es más fácil de leer y mantener.

Si el nombre de su "status" variable (que es el caso en el código de ejemplo), me gusta mucho preferiría ver

if(status == false) // if status is false

Por otro lado, si se había nombrado a su isXXX variables (por ejemplo, isReadableCode), entonces el primero es más legible. considerar:

if(!isReadable) { // if not readable 
    System.out.println("I'm having a headache reading your code"); 
} 
2

Mi sensación personal cuando se trata de leer

if(!status) : if not status 

if(status == false) : if status is false 

si usted no está acostumbrado a la lectura de estado!. No veo ningún daño en la segunda forma.

si utiliza "activa" en lugar de lo que el estado if (! Activo) es más fácil de leer