Existe uma maneira melhor de negar um booleano em Java do que um simples if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Existe uma maneira melhor de negar um booleano em Java do que um simples if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Respostas:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
operador (na verdade, dois deles, juntamente com dois ++
operadores), mas não define um !!
operador. Se desejar, -(-(integer))
use espaço em branco entre os dois -
caracteres. Mas !!
analisa como dois !
operadores, independentemente do espaço em branco.
theBoolean ^= true;
Menos pressionamentos de tecla se a sua variável tiver mais de quatro letras
Editar : o código tende a retornar resultados úteis quando usado como termos de pesquisa do Google. O código acima não. Para quem precisa, é um XOR bit a bit, conforme descrito aqui .
theBoolean = !theBoolean;
outheBoolean = theBoolean ? false : true;
O caminho "óbvio" (para a maioria das pessoas)
theBoolean = !theBoolean;
O caminho "mais curto" (na maioria das vezes)
theBoolean ^= true;
A maneira "mais visual" (mais incerta)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Como o operador de atribuição sempre retorna o que foi atribuído, isso alternará o valor por meio do operador bit a bit e retornará o novo valor atribuído a ser usado na chamada do método.
C
Definitivamente, mas Java
não é permitido misturar booleano e inteiro (também coisas como while(1)
não são possíveis em Java).
Se você usa valores nulos booleanos e os considera falsos, tente o seguinte:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Se você não estiver entregando valores nulos booleanos, tente o seguinte:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Estes são os mais limpos, porque mostram a intenção na assinatura do método, são mais fáceis de ler em comparação com o ! operador e pode ser facilmente depurado.
Uso
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Obviamente, se você usar o Groovy ou um idioma que permita métodos de extensão, poderá registrar uma extensão e simplesmente:
Boolean b = false
b = b.toggle() // == true
Boolean
e realmente o alterne dentro do método (mas ainda um pouco ambíguo).
Esta resposta surgiu ao pesquisar "função booleana invertida java". O exemplo abaixo evitará que certas ferramentas de análise estática falhem nas construções devido à lógica de ramificação. Isso é útil se você precisar inverter um booleano e não tiver construído testes de unidade abrangentes;)
Boolean.valueOf(aBool).equals(false)
ou alternativamente:
Boolean.FALSE.equals(aBool)
ou
Boolean.FALSE::equals
Boolean.FALSE::equals
para uma função de mapeamento em vez de escrever um pouco lambda
Se você não está fazendo nada particularmente profissional, sempre pode usar uma classe Util. Ex, uma classe util de um projeto para uma classe.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
então basta criar um objeto Util
Util u = new Util();
e ter algo para o retornoSystem.out.println( u.flip(bool) );
Se você vai acabar usando a mesma coisa várias vezes, use um método, e especialmente se houver projetos, faça uma classe Util. Não sei qual é o padrão da indústria. (Programadores experientes ficam à vontade para me corrigir)
A classe BooleanUtils
suporta a negação de um booleano. Você encontra esta classe em commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Antes:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Depois de:
boolean result = isresult();
result ^= true;