Porque el "resultado" de una tarea es el valor asignado ... por lo que sigue siendo una expresión boolean
en el segundo caso. Las expresiones if
requieren que la condición sea una expresión boolean
, que se cumple por el segundo pero no por el primero. Efectivamente, los dos fragmentos son:
int a;
a = 1;
if (a) { }
y
boolean b;
b = true;
if (b) { }
¿Está claro que la expansión de la segunda versión que se compilará, pero no el primero?
Esta es una razón para no hacer comparaciones entre verdadero y falso directamente. Por lo tanto, siempre escribiría if (b)
en lugar de if (b == true)
y if (!b)
en lugar de if (b == false)
. Todavía tiene problemas con if (b == c
) cuando b
y c
son variables boolean
, hay un error tipográfico que puede causar un problema. Sin embargo, no puedo decir que me haya pasado alguna vez.
EDIT: En respuesta a tu edición - cesiones de todo tipo se puede utilizar en if
declaraciones - y while
bucles, etc, siempre y cuando la expresión de condición general es boolean
. Por ejemplo, es posible que tiene:
String line;
while ((line = reader.readLine()) != null)
{
// Do something with a line
}
Mientras generalmente Evita efectos secundarios en las condiciones, este idioma en particular es a menudo útil para el ejemplo mostrado anteriormente, o el uso de InputStream.read
. Básicamente es "mientras que el valor que leí es útil, úselo".
No es una mala idea para obtener en el hábito de poner la primera constante en sus instrucciones if .... Es decir: si (verdadero == b) {} y si (1 == a) { } Este hábito garantiza que el compilador te golpeará si escribes = en lugar de ==. –
@Ollie: las opiniones difieren ampliamente en eso. En lo que respecta a la legibilidad, esta * es * una mala idea. Además, no ofrece ningún beneficio en idiomas como Java, ya que aquí no puede haber confusión. Quiero decir, nadie escribe una prueba como 'if (a == verdadero)', ¿verdad? –
@Konrad. Tienes razón en Java, pero para este recauchutado en C que trabaja en PERL y en otros idiomas, me ha ahorrado muchas veces. –