Existe-t-il une meilleure façon de nier un booléen en Java qu'un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Existe-t-il une meilleure façon de nier un booléen en Java qu'un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Réponses:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
opérateur (en fait, deux d'entre eux, ainsi que deux ++
opérateurs), mais ne définit pas d' !!
opérateur. Si vous le souhaitez, -(-(integer))
vous pouvez utiliser un espace blanc entre les deux -
caractères. Mais !!
analyse comme deux !
opérateurs indépendamment de l'espace blanc.
theBoolean ^= true;
Moins de frappes si votre variable est plus longue que quatre lettres
Modifier : le code a tendance à renvoyer des résultats utiles lorsqu'il est utilisé comme termes de recherche Google. Le code ci-dessus ne fonctionne pas. Pour ceux qui en ont besoin, c'est XOR au niveau du bit comme décrit ici .
theBoolean = !theBoolean;
outheBoolean = theBoolean ? false : true;
La manière "évidente" (pour la plupart des gens)
theBoolean = !theBoolean;
La voie "la plus courte" (la plupart du temps)
theBoolean ^= true;
La manière "la plus visuelle" (la plus incertaine)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Étant donné que l'opérateur d'affectation renvoie toujours ce qui a été attribué, cela basculera la valeur via l'opérateur au niveau du bit, puis renverra la nouvelle valeur affectée à utiliser dans l'appel de méthode.
C
, mais Java
il n'est pas permis de mélanger booléen et entier (aussi des choses comme while(1)
ne sont pas possibles en Java).
Si vous utilisez des valeurs NULL booléennes et les considérez comme fausses, essayez ceci:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Si vous ne remettez pas de valeurs NULL booléennes, essayez ceci:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Ce sont les plus propres car ils montrent l'intention dans la signature de la méthode, sont plus faciles à lire que ! et peut être facilement débogué.
Usage
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Bien sûr, si vous utilisez Groovy ou un langage qui autorise les méthodes d'extension, vous pouvez enregistrer une extension et simplement faire:
Boolean b = false
b = b.toggle() // == true
Boolean
et basculez-le vraiment dans la méthode (mais toujours quelque peu ambigu).
Cette réponse est apparue lors de la recherche de "fonction booléenne inverti java". L'exemple ci-dessous empêchera certains outils d'analyse statique d'échouer les générations en raison de la logique de branchement. C'est utile si vous devez inverser un booléen et que vous n'avez pas construit de tests unitaires complets;)
Boolean.valueOf(aBool).equals(false)
Ou bien:
Boolean.FALSE.equals(aBool)
ou
Boolean.FALSE::equals
Boolean.FALSE::equals
à une fonction de cartographie au lieu d'écrire un petit lambda
Si vous ne faites rien de particulièrement professionnel, vous pouvez toujours utiliser une classe Util. Ex, une classe util d'un projet pour une classe.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
puis il suffit de créer un objet Util
Util u = new Util();
et d'avoir quelque chose pour le retourSystem.out.println( u.flip(bool) );
Si vous allez finir par utiliser la même chose encore et encore, utilisez une méthode, et surtout si c'est sur plusieurs projets, créez une classe Util. Je ne sais pas quelle est la norme de l'industrie. (Les programmeurs expérimentés se sentent libres de me corriger)
La classe prend en BooleanUtils
charge la négation d'un booléen. Vous trouvez cette classe dans commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Avant:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Après:
boolean result = isresult();
result ^= true;