operadores - Manera más limpia de alternar una variable booleana en Java?
operadores logicos java (5)
¿Hay una mejor manera de negar un booleano en Java que un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Hay varios
La forma "obvia" (para la mayoría de las personas)
theBoolean = !theBoolean;
La forma "más corta" (la mayor parte del tiempo)
theBoolean ^= true;
La forma "más visual" (más incierta)
theBoolean = theBoolean ? false : true;
Extra: alternar y usar en una llamada a un método
theMethod( theBoolean ^= true );
Dado que el operador de asignación siempre devuelve lo que se ha asignado, esto alternará el valor a través del operador bit a bit, y luego devolverá el valor recientemente asignado para ser utilizado en la llamada al método.
Antes de:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Después:
boolean result = isresult();
result ^= true;
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 NULL Booleanos, 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 el ! operador, y puede ser fácilmente depurado.
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
theBoolean = !theBoolean;
theBoolean ^= true;
Menos pulsaciones de teclas si su variable tiene más de cuatro letras