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;
}
Si vous utilisez des valeurs booléennes NULL 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 traitez pas les valeurs booléennes NULL, essayez ceci :
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Ce sont les le plus propre parce qu'ils montrent l'intention dans la signature de la méthode, sont plus faciles à lire par rapport aux ! et peut être facilement débogué.
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 simplement faire :
Boolean b = false
b = b.toggle() // == true
Bonne approche, mais pas totalement dépourvue d'ambiguïté (selon moi). Pour quelqu'un qui utilise/lit juste "toggle(..)" pourrait penser que l'appel de la méthode (sans l'assigner à nouveau à la variable) pourrait déjà basculer la variable sous-jacente. C'est évident pour nous en voyant le code, mais dans la vie réelle, cela pourrait être assez difficile à déboguer. Un meilleur nom de méthode pourrait être "opposé" ou éventuellement "négation", pour rendre cela un peu plus évident ; ou utiliser la première approche avec un objet Boolean
et le basculer réellement dans la méthode (mais toujours un peu ambigu).
La classe BooleanUtils
supporte la négation d'un booléen. Vous trouverez cette classe dans commons-lang:commons-lang
BooleanUtils.negate(theBoolean)
LeBooléen ^= 1
Cette syntaxe est intéressante car elle semble utiliser le nombre minimum de frappes au clavier. (Et vous pouvez supprimer les espaces pour réduire le nombre de caractères par deux. De toute évidence, cette réponse est similaire à celle de nlaq.
En pratique, si vous disposez d'un post-processeur JavaScript qui supprime les commentaires de la sortie, vous voudrez probablement ajouter un commentaire. Quelque chose comme ceci :
theBoolean ^= 1 ; //Une astuce XOR qui fait basculer la valeur booléenne. (D'après StackOverflow)
Si vous ne faites rien de particulièrement professionnel, vous pouvez toujours utiliser une classe utilitaire. 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 il suffit de créer un objet Util Util u = new Util();
et avoir quelque chose pour le retour System.out.println( u.flip(bool) );
Si vous devez utiliser la même chose encore et encore, utilisez une méthode, et surtout si c'est pour plusieurs projets, créez une classe utilitaire. Je ne sais pas quelle est la norme industrielle cependant. (Les programmeurs expérimentés sont libres de me corriger)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Oh bien, j'étais sur le point de poser la même question, bien que ma question aurait été spécifique à javascript/as3, ou ECMAScript en général je suppose... qui sera facilement couvert par cette question.
0 votes
Et s'il n'y a pas d'opérateur !