2010-08-30 11 views
8

Duplicar posibles (foo!):
What is the preferred way to write boolean expressions in JavaMejor Práctica: if (foo == false) o si

Hoy en día, yo y mi colega barrían una discusión. Cuál es una mejor manera de usar las variables booleanas en el código de Java junto con las sentencias if.

boolean foo=true 
//1. 

if(foo == false) 
    // do something 
else 
    // do something else 

//2. 

if(!foo) 
    // do something 
else 
    // do something else 

que apoyan [1], ya que creo que es más fácil de leer. ¿Qué piensan?

+0

duplicado exacto de [¿Cuál es la mejor forma de escribir expresiones booleanas en Java] (http://stackoverflow.com/questions/2409378/what-is-the-preferred-way-to-write -boolean-expressions-in-java) –

+0

Ok, ahora tengo que ceder a la vista de mi amigo (y ustedes). Gracias a todos ustedes por su rápida participación. :) – pavanlimo

+2

Si admite 1, ¿por qué detenerse ahí? Reducción ad absurdum exige que use 'if ((((foo == falso) == verdadero) == verdadero) == verdadero) ...'. – paxdiablo

Respuesta

12

Número 2, junto con "foo" tiene un nombre descriptivo, por lo que el código lee así:

if (!hasPurple) ...

+0

Sí, las variables mejor nombradas son definitivamente el camino a seguir. Se vuelve más legible – drekka

0

Voy para 2 porque, como programador, incluso 2 son legibles.

Imagine que tiene cientos de tales comprobaciones de validación que siempre verifica con falsas.

Sin

0

Si usted es el único que se va a mantenga su código y podrá usar el estilo que desee.

Habiendo dicho eso, foo es favorecido por la mayoría de los desarrolladores que conozco.

0

Es una cuestión de opinión. Prefiero el número 2 porque tiene menos código para escribir y creo que es igual de fácil de leer.

6

Encuentro # 2 más legible. ¡Creo que cada desarrollador de Java (soy un desarrollador de C#) sabría qué! medio. I

Aunque probablemente no sea el punto aquí, prefiero poner mi bloque "verdadero" como afirmación. Si la condición es generalmente va a ser falsa, entonces el nombre de mi variable para representar

if (notFoo) 
    // do something when 
else 
    // do something else 
+1

No estoy de acuerdo. Las variables booleanas se deben nombrar con firmeza siempre que sea posible. ¡Deberías poder leer siempre! como "no", y si necesitas foo, evitas el confuso doble negativo! notOf. La única excepción es cuando foo tiene un antónimo (como convexo vs cóncavo). – ILMTitan

+0

Los dobles negativos acordados son malvados :) Pero, si se usa puramente if-else,! NotFoo simplemente se llamaría Foo :) –

4

Me parece una buena idea para evitar cosas como

if (foo == true){}

porque ocasionalmente se podría escribir

if (foo = true){}

como un error tipográfico. Muchas veces es un error fácil de detectar, pero parece que se presta bien para cometer ese error rápido.

+0

'if (foo = true) {}' no es legal Java y no se compilará (y debería sobresalen como mala sintaxis en su IDE). Tener miedo de las sentencias 'if (var = constant)' es un remanente malo de C, donde era legal (y en ocasiones se fomentaba) asignar en el condicional. Deje de preocuparse por eso, y en su lugar preocúpese por lo que es más legible. – Avi

+1

@Avi: Sí compila bajo JDK6. Te di el beneficio de la duda y la escribí yo mismo. Se compila sin advertencias en ambas líneas de comando en un cuadro de FreeBSD y a través de Eclipse, y Eclipse no muestra advertencias propias. – JBirch

+0

estás en lo correcto. Me disculpo. Estaba confundido, porque la mayoría de las expresiones de asignación son ilegales en condicionales, a menos que sean de tipo booleano (ya que no hay conversión automática de int a booleano o de puntero a booleano en Java). Sin embargo, seguiría con el más legible. En el caso de los enteros, escribiría 'if (foo == CONSTANT)'; en el caso de los booleanos, simplemente escribiría 'if (foo)' que es más legible y evita este problema. – Avi

0

Al usar variable booleana como una condición en la instrucción, no la compare con verdadera.

No es un error, pero es un mal estilo, ya que es un valor booleano, así que simplemente úselo.

Razones por qué "! Foo" es mejor que "foo == false".Referenciada from

  • concisión: suponiendo que usted está en un contexto en el que un valor lógico es
    necesaria, y "x" es un valor lógico, es personajes menos a escribir "x" que "x
    = = verdadero ", o"! x "que" x == falso ".

  • convención: sazonado programadores en Java (o C, C++, C# y la mayoría de los otros
    idiomas) esperan ver "x" en lugar
    que "x == true", y "x" en lugar
    que "x == falso".

  • Robustez: en Java las sentencias condicionales y bucles todas requieren un valioso expresión
    booleano en la condición
    . Si "y" no es un booleano,
    , entonces un error tipográfico del formulario "if (y = foo) {" dará un error de compilación en
    Java. Pero si "y" es un booleano entonces
    "if (y = foo) {" no da un error de compilación
    . Por lo tanto, al evitar "==" para booleanos evitará establecer
    usted mismo para una serie completa de errores
    resultante de errores tipográficos.

+3

-1 para ** integral ** copiar pega de [respuesta de Stephen] (http://stackoverflow.com/questions/1451152/difference-between-while-x-false-and-while-x-in-java/1453172 # 1453172).En primer lugar, incluso si hay un enlace, usted hace que el contenido aparezca como si fuera suyo, o reformulado, mientras que no lo es. Formatee como se cita para que no exista ambigüedad. Segundo, si la respuesta pegada es apropiada, entonces la pregunta es muy probable que sea un duplicado y debe cerrarse como tal. Al final, esto es solo una mala práctica. –

+0

@Pascal Thivent Para mi respuesta, agregué mi vista (las 2 líneas superiores aparecen en negrita), así como la sección de referencia añadida de Stephen. También agregué el enlace desde el que se hacía referencia. No intenté mostrar que la sección referida era mi opinión. Lo siento si así lo sintió. He eliminado la ambigüedad y la he citado claramente. – YoK

+0

Gracias por eliminar la ambigüedad. Realmente creo que es importante maximizar la transparencia y eliminaré mi voto negativo. –

Cuestiones relacionadas