web-dev-qa-db-fra.com

Vérification booléenne dans la condition 'if'

Lequel est le meilleur style de codage Java?

boolean status = true;
if (!status) {
    //do sth
} else {
    //do sth
}

ou:

if (status == false) {
    //do sth
} else {
    //do sth
}
17
jasonfungsing

Ancien, bien sûr. Ce dernier est redondant et ne fait que montrer que vous n’avez pas très bien compris le concept de booléens.

Une autre suggestion: Choisissez un nom différent pour votre variable boolean. Selon ce Java guide de style :

est le préfixe à utiliser pour les variables et méthodes booléennes.

isSet, isVisible, isFinished, isFound, isOpen

Il s'agit de la convention de dénomination pour les méthodes et variables boolean utilisées par Sun pour les packages principaux Java.

L'utilisation du préfixe is résout un problème courant lié au choix de noms booléens incorrects tels que status ou flag. isStatus ou isFlag ne convient tout simplement pas et le programmeur est obligé de choisir des noms plus significatifs.

Les méthodes Setter pour les variables boolean doivent avoir le préfixe défini comme suit:

void setFound(boolean isFound);

Il existe quelques alternatives au préfixe is qui convient mieux dans certaines situations. Ce sont has, can et should préfixes:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
21
missingfaktor

Je suggérerais que vous fassiez:

if (status) {
    //positive work
} else {
    // negative work
}

Les tests ==, bien que manifestement redondants, courent également le risque d’une seule faute = qui aboutirait à une affectation.

23
akf

Si vous regardez les alternatives sur cette page, bien sûr, la première option est meilleure et la seconde est plus détaillée. Mais si vous parcourez une classe nombreuse écrite par quelqu'un d'autre, cette verbosité peut faire toute la différence entre réaliser immédiatement ou non le conditionnel.

Une des raisons pour lesquelles je me suis éloigné de Perl est qu’il s’appuie énormément sur la ponctuation, qui est beaucoup plus lente à interpréter lors de la lecture.

Je sais que je suis sur-voté ici, mais je vais presque toujours accepter un code plus explicite afin que d'autres puissent le lire plus précisément. Là encore, je n’utiliserais jamais une variable booléenne appelée "status". Peut-être que isSuccess ou tout simplement le succès, mais "statut" être vrai ou faux ne signifie rien intuitivement au lecteur occasionnel. Comme vous pouvez le constater, la lisibilité du code me tient beaucoup à coeur car je lis beaucoup de code écrit par d’autres. 

10
dj_segfault

Le premier, ou if (status) { /*second clause*/ } else { /* first clause */ }

MODIFIER

Si la deuxième forme est vraiment souhaitée, alors if (false == status) <etc>, bien que plus laid, est probablement plus sûr (typos).

7
lijie

L'ancien. Ce dernier ne fait qu'ajouter de la verbosité.

4
user207421

Cela dépend aussi de la façon dont vous nommez votre variable.

Quand les gens demandent "quelle est la meilleure pratique" - cela implique implicitement que les deux sont corrects, donc c'est simplement une question qui est plus facile à lire et à maintenir.

Si vous nommez votre variable "status" (ce qui est le cas dans votre exemple de code), je préférerais de beaucoup voir

if(status == false) // if status is false

Par ailleurs, si vous avez nommé votre variable isXXX (par exemple, isReadableCode), la première est plus lisible. considérer:

if(!isReadable) { // if not readable
  System.out.println("I'm having a headache reading your code");
}
4
RAY

Le premier. Mais juste un autre point, ce qui suit rendrait également votre code plus lisible:

if (!status) {
    // do false logic
} else {
    // do true logic
}

Notez qu'il existe des espaces supplémentaires entre if et (, ainsi qu'avant l'instruction else.

MODIFIER

Comme l'a noté @Mudassir, s'il existeNOun autre code partagé dans la méthode utilisant la logique, le meilleur style serait alors:

if (!status) {
    // do false logic
}

// do true logic
3
Nico Huysamen

Mon sentiment personnel quand il s'agit de lire

if(!status) : if not status

if(status == false) : if status is false

si vous n’êtes pas habitué à! lire le statut. Je ne vois aucun mal à faire comme la deuxième façon.

si vous utilisez "actif" au lieu du statut I chose si (! actif) est plus lisible

2
asela38

Le premier style est meilleur. Bien que vous deviez utiliser un meilleur nom de variable

1
Petro Semeniuk

C'est plus lisible et une bonne pratique aussi.

if(!status){
//do sth
}else{
//do sth
}
0
Singleton