Le moyen le plus propre de basculer une variable booléenne en Java?
Question
Existe-t-il un meilleur moyen de nier un booléen en Java qu'un simple if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
La solution
theBoolean = !theBoolean;
Autres conseils
theBoolean ^= true;
Moins de frappes au clavier si votre variable a plus de quatre lettres
Il y en a plusieurs
Le "évident" " manière (pour la plupart des gens)
theBoolean = !theBoolean;
Le "plus court" " manière (la plupart du temps)
theBoolean ^= true;
Le "plus visuel" " manière (le plus incertain)
theBoolean = theBoolean ? false : true;
Extra: bascule et utilise dans un appel de méthode
theMethod( theBoolean ^= true );
Etant donné que l'opérateur d'affectation renvoie toujours ce qui a été affecté, cette option bascule la valeur via l'opérateur bit à bit, puis renvoie la nouvelle valeur affectée à utiliser dans l'appel de méthode.
Si vous utilisez des valeurs booléennes NULL et que vous les considérez comme fausses, essayez ceci:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Si vous ne donnez pas de valeur booléenne NULL, essayez ceci:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Ce sont les les plus propres , car ils montrent l'intention dans la signature de la méthode, sont plus faciles à lire que l'opérateur ! et peuvent être facilement débogués.
Utilisation
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 faire tout simplement:
Boolean b = false
b = b.toggle() // == true
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); }
}
alors créez simplement un objet Util
Util u = new Util ();
et avoir quelque chose pour le retour System.out.println (u.flip (bool));
Si vous finissez par utiliser la même chose encore et encore, utilisez une méthode, et surtout si cela concerne plusieurs projets, créez une classe Util. Je ne sais pas quelle est la norme de l'industrie. (Les programmeurs expérimentés sont libres de me corriger)
Avant:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Après:
boolean result = isresult();
result ^= true;