¿Hay una mejor manera de negar un booleano en Java que un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
¿Hay una mejor manera de negar un booleano en Java que un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Respuestas:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
operador (en realidad, dos de ellos, junto con dos ++
operadores), pero no define un !!
operador. Si lo desea -(-(integer))
, puede usar espacios en blanco entre los dos -
caracteres. Pero se !!
analiza como dos !
operadores independientemente del espacio en blanco.
theBoolean ^= true;
Menos pulsaciones de teclas si su variable tiene más de cuatro letras
Editar : el código tiende a devolver resultados útiles cuando se usa como términos de búsqueda de Google. El código anterior no lo hace. Para aquellos que lo necesitan, es XOR bit a bit como se describe aquí .
theBoolean = !theBoolean;
otheBoolean = theBoolean ? false : true;
La forma "obvia" (para la mayoría de las personas)
theBoolean = !theBoolean;
El camino "más corto" (la mayoría de las veces)
theBoolean ^= true;
La forma "más visual" (más incierta)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Dado que el operador de asignación siempre devuelve lo que se le ha asignado, esto alternará el valor a través del operador bit a bit y luego devolverá el nuevo valor asignado para ser utilizado en la llamada al método.
C
Definitivamente, pero en Java
él no está permitido mezclar booleano y entero (también cosas como while(1)
no son posibles en Java).
Si usa valores booleanos NULL y los considera falsos, intente esto:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Si no está entregando valores booleanos NULL, intente esto:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
¡Estos son los más limpios porque muestran la intención en la firma del método, son más fáciles de leer en comparación con ! operador, y se puede depurar fácilmente.
Uso
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Por supuesto, si usa Groovy o un lenguaje que permite métodos de extensión, puede registrar una extensión y simplemente hacer:
Boolean b = false
b = b.toggle() // == true
Boolean
y realmente alternarlo dentro del método (pero todavía algo ambiguo).
Esta respuesta surgió al buscar "función booleana invertida de Java". El siguiente ejemplo evitará que ciertas herramientas de análisis estático fallen las compilaciones debido a la lógica de ramificación. Esto es útil si necesita invertir un valor booleano y no ha desarrollado pruebas unitarias completas;)
Boolean.valueOf(aBool).equals(false)
o alternativamente:
Boolean.FALSE.equals(aBool)
o
Boolean.FALSE::equals
Boolean.FALSE::equals
a una función de mapeo en lugar de escribir una pequeña lambda
Si no está haciendo nada particularmente profesional, siempre puede usar una clase Util. Por ejemplo, una clase util de un proyecto para una clase.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
entonces solo crea un objeto Util
Util u = new Util();
y tenga algo para devolverSystem.out.println( u.flip(bool) );
Si va a terminar usando lo mismo una y otra vez, use un método, y especialmente si se trata de proyectos, haga una clase de Util. Sin embargo, no sé cuál es el estándar de la industria. (Los programadores experimentados pueden corregirme)
La clase BooleanUtils
apoya la negación de un booleano. Encontrará esta clase en commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Antes de:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Después:
boolean result = isresult();
result ^= true;