Java Language Pitfall - Utiliser '==' pour tester un booléen


Exemple

Parfois, un nouveau programmeur Java écrit un code comme celui-ci:

public void check(boolean ok) {
    if (ok == true) {           // Note 'ok == true'
        System.out.println("It is OK");
    }
}

Un programmeur expérimenté le trouverait maladroit et voudrait le réécrire comme suit:

public void check(boolean ok) {
    if (ok) {
       System.out.println("It is OK");
    }
}

Cependant, il y a plus de tort avec ok == true que la simple maladresse. Considérez cette variation:

public void check(boolean ok) {
    if (ok = true) {           // Oooops!
        System.out.println("It is OK");
    }
}

Ici, le programmeur a mal interprété == comme = ... et maintenant le code a un bogue subtil. L'expression x = true assigne inconditionnellement true à x et évalue ensuite true . En d'autres termes, la méthode de check affichera désormais "Il est correct", quel que soit le paramètre.

La leçon ici est de sortir de l'habitude d'utiliser == false et == true . En plus d'être verbeux, ils rendent votre codage plus susceptible aux erreurs.


Note: Une alternative possible à ok == true qui évite le piège est d'utiliser les conditions de Yoda ; c'est-à-dire mettre le littéral à gauche de l'opérateur relationnel, comme dans true == ok . Cela fonctionne, mais la plupart des programmeurs seraient probablement d'accord pour dire que les conditions de Yoda semblent étranges. Certes, ok (ou !ok ) est plus concis et plus naturel.