web-dev-qa-db-fra.com

if (boolean == false) vs. if (! boolean)

Duplicata possible:
Est-il mauvais de comparer explicitement avec des constantes booléennes, par exemple si (b == false) en Java?

Dans cet exemple de code NotePadProvider , j'ai remarqué que l'auteur a choisi le formulaire:

    if (values.containsKey(NoteColumns.CREATED_DATE) == false) {
        values.put(NoteColumns.CREATED_DATE, now);
    }

Plus de:

    if (!values.containsKey(NoteColumns.CREATED_DATE)) {
        values.put(NoteColumns.CREATED_DATE, now);
    }

Y a-t-il un avantage dans la première forme par rapport à la plus logique?

34
ateiob

En dehors de la "lisibilité", non. Ils sont fonctionnellement équivalents.

("Lisibilité" est entre guillemets parce que je déteste == false et trouve ! beaucoup plus lisible. Mais d'autres non.)

55
Ry-

C'est un choix de style. Cela n'affecte en rien les performances du code, il le rend simplement plus verbeux pour le lecteur.

6
Woot4Moo

- Voici son plus sur le coding style que d'être fonctionnalité ....

- Le la 1ère option est très claire, mais ensuite le le 2ème est assez élégant ... pas d'offense, c'est juste ma vue ..

5
Kumar Vivek Mitra

Surtout la lisibilité. Lors de la lecture d'autres codes, il est beaucoup plus intuitif de lire comme PAS CONTIENT TOUCHE!values.containsKey(NoteColumns.CREATED_DATE) au lieu de lire CONTIENT TOUCHE IS FAUX)(values.containsKey(NoteColumns.CREATED_DATE) == false).

5
devang

Non, je ne vois aucun avantage. La deuxième est plus directe.

btw: Le deuxième style se trouve dans tous les coins de la source JDK.

3

Remarque: Avec ConcurrentMap, vous pouvez utiliser le plus efficace

values.putIfAbsent(NoteColumns.CREATED_DATE, now);

Je préfère la solution moins verbeuse et évite les méthodes comme IsTrue ou IsFalse ou similaires.

2
Peter Lawrey

Le premier formulaire, lorsqu'il est utilisé avec une API qui renvoie Boolean et comparé à Boolean.FALSE, ne lève jamais un NullPointerException.

Le deuxième formulaire, lorsqu'il est utilisé avec l'interface Java.util.Map, Ne lancera jamais un NullPointerException car il renvoie un boolean et non un Boolean.

Si vous n'êtes pas préoccupé par les idiomes de codage cohérents, alors vous pouvez choisir celui que vous aimez, et dans ce cas concret, cela n'a vraiment pas d'importance. Si vous faites vous souciez d'un codage cohérent, pensez à ce que vous voulez faire lorsque vous cochez un Boolean qui peut être NULL.

1
Sam