224 votes

Le moyen le plus propre de faire basculer une variable booléenne en Java ?

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;
}

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 !

579voto

Aaron Maenpaa Points 39173
theBoolean = !theBoolean;

17 votes

C'est... vraiment évident... oups ! Je ne sais pas pourquoi je n'y ai pas pensé. Merci.

0 votes

!Boolean semble être un choix naturel - peut-être dans le futur.

22 votes

@ypnos : !!bool == !(!(bool)) == bool .

174voto

nlaq Points 11379
theBoolean ^= true;

Moins de frappes si votre variable comporte plus de quatre lettres.

Modifier : le code tend à renvoyer des résultats utiles lorsqu'il est utilisé comme termes de recherche sur Google. Ce n'est pas le cas du code ci-dessus. Pour ceux qui en ont besoin, c'est XOR par bit comme décrit ici .

6 votes

La brièveté est l'âme de l'esprit.

7 votes

Maintenant, je peux lâcher le nom (la syntaxe ?) de XOR avec désinvolture pour avoir l'air cool devant mes amis programmeurs. Votre réponse devrait être fusionnée avec la réponse choisie, ensemble elles sont la perfection pure.

6 votes

@ScottStanchfield Ces personnes devraient l'apprendre. Ce n'est pas difficile du tout, ce n'est pas un hack, et ne pas le savoir mène souvent à un code merdique comme par exemple celui de cette question. C'est une vraie explosion - cinq lignes en utilisant les conventions standard !

41voto

Levit Points 760

Il existe plusieurs

La méthode "évidente (pour la plupart des gens)

theBoolean = !theBoolean;

Le chemin le plus court (la plupart du temps)

theBoolean ^= true;

Le moyen le plus visuel (très incertain)

theBoolean = theBoolean ? false : true;

Extra : Basculer et utiliser dans un appel de méthode

theMethod( theBoolean ^= true );

Étant donné que l'opérateur d'assignation renvoie toujours ce qui a été assigné, cette opération bascule la valeur via l'opérateur bitwise, puis renvoie la nouvelle valeur assignée à utiliser dans l'appel de méthode.

0 votes

Enveloppez la mise en œuvre dans une fonction/méthode appelée toggle et il n'y a pratiquement aucun moyen de la confondre.

0 votes

@Reiner : Pour C définitivement, mais en Java il n'est pas permis de mélanger booléen et entier (également des choses comme while(1) ne sont pas possibles en Java).

0 votes

@Lambage : C'est vrai, mais l'inconvénient est que vous ne pouvez pas basculer un booléen en le passant simplement, car il n'est pas possible de passer des primitives par référence en Java. Vous devriez réaffecter le résultat de la méthode à votre variable, ou créer une classe d'enveloppe pour le booléen.

16voto

Andy Lester Points 34051
theBoolean = ! theBoolean;

4voto

Doctor Parameter Points 548

Cette réponse est apparue lors de la recherche de "java invert boolean function". L'exemple ci-dessous empêchera certains outils d'analyse statique d'échouer les constructions en raison de la logique de branchement. C'est utile si vous avez besoin d'inverser un booléen et que vous n'avez pas construit de tests unitaires complets ;)

Boolean.valueOf(aBool).equals(false)

ou alternativement :

Boolean.FALSE.equals(aBool)

ou

Boolean.FALSE::equals

1 votes

J'aime le fait que vous puissiez passer Boolean.FALSE::equals à une fonction de mappage au lieu d'écrire un petit lambda

Prograide.com

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.

Powered by:

X