2010-11-26 11 views
13

lequel est le meilleur dans Java code style?booléen de vérification si()

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

ou

if(status == false) { 
    //do sth 
} else { 
    //do sth 
} 
+0

'interrupteur (état) {cas vrai: {...; Pause; } défaut: { ...; Pause; }} ':) – tchrist

+0

@tchrist: ... et votre point est? – missingfaktor

+0

switch (booléen) est faux, booléen ne peut pas être dans le commutateur – ashishdhiman2007

Répondre

17

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

Encore une suggestion: Choisissez un nom différent pour votre variable boolean. Comme par this Java style guide:

est préfixe doit être utilisé pour les variables et les méthodes booléennes.

isSet, isVisible, isFinished, isFound, isOpen

C'est la convention de nommage pour boolean méthodes et variables utilisées par Sun pour les packages de base Java.

En utilisant le préfixe is permet de résoudre un problème commun de choisir les mauvais noms booléennes comme status ou flag. isStatus ou isFlag ne correspond tout simplement pas, et le programmeur est forcé de choisir plus noms significatifs.

méthodes setter pour boolean les variables doivent avoir mis en préfixe comme dans:

void setFound(boolean isFound);

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

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false; 
+0

Essayez 'good_status' ou' fair_weather_status' ou 'status_known' ou' status_unknown' ou même 'status_malus__vana_salus__semper_dissolubilis'. :) – tchrist

4

L'ancien. Ce dernier ajoute simplement de la verbosité.

0

Ceci est plus lisible et une bonne pratique aussi.

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

sauf que je retournerais les clauses que vous venez de tester si (état) –

+0

En outre, vous pourriez reformuler le nom de la variable avec un préfixe "is-" pour indiquer quelle est la valeur par défaut est. –

6

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

EDIT

Si la deuxième forme est vraiment désiré, puis if (false == status) <etc>, alors que plus laid, est probablement plus sûr (fautes de frappe WRT).

+0

+1 pour (false == status), qui donne également des indications pour la question 'if (0 == i)' non demandée – subsub

22

Je vous suggère de faire:

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

Les == essais, alors que de toute évidence redondante, courent aussi le risque d'une seule faute de frappe = qui entraînerait une cession.

+2

+1 pour signaler le danger de saisir par erreur un seul "=" – RAY

+1

+1 de moi pour interchanger la place de la logique positive et négative. – Mudassir

3

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

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

Notez qu'il existe des espaces supplémentaires entre if et le (, et aussi avant la déclaration else.

EDIT

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

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

// do true logic 
+0

@Downvoter - Voulez-vous commenter? –

+0

Oui, j'ai downvoted votre réponse. Mais ce n'est pas personnel. – Mudassir

+1

@Mudassir * sigh * ... –

8

Si vous regardez Dans les alternatives sur cette page, bien sûr, la première option semble mieux et la seconde est plus verbeuse. Mais si vous regardez à travers une grande classe que quelqu'un d'autre a écrit, cette verbosité peut faire la différence entre la réalisation immédiate de ce que le conditionnel teste ou non. L'une des raisons pour lesquelles je me suis éloigné de Perl est qu'il repose beaucoup sur la ponctuation, qui est beaucoup plus lente à interpréter pendant la lecture.

Je sais que je suis mis en minorité ici, mais je vais presque toujours me ranger du côté du code plus explicite afin que les autres puissent le lire avec plus de précision. Là encore, je n'utiliserais jamais non plus une variable booléenne appelée "status". Peut-être est succès ou juste succès, mais «statut» étant vrai ou faux ne signifie rien pour le lecteur occasionnel intuitivement. Comme vous pouvez le constater, je suis très sensible à la lisibilité du code parce que je lis tellement de code que d'autres ont écrit.

+0

+1 pour choisir la clarté sur l'intelligence – RAY

+0

Bon. +1 de moi. – Mudassir

+0

est d'accord avec 'status' étant un nom horrible, mais'! S' est idiomatique dans les langages dérivés du C pour tester le faux-capot. – lijie

1

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

3

Cela dépend aussi de la façon dont vous nommez votre variable.Quand les gens demandent "ce qui est une meilleure pratique" - cela implique implicitement que les deux sont corrects, donc c'est juste une question qui est plus facile à lire et à maintenir.

Si vous nommez votre variable « statut » (ce qui est le cas dans votre exemple de code), je préférerais voir

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

D'autre part, si vous aviez appelé votre variable isXXX (par exemple isReadableCode), alors le premier est plus lisible. considérer:

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

Mon sentiment personnel en ce qui concerne la lecture

if(!status) : if not status 

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

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

si vous utilisez « actif » au lieu de l'état de chose I si (! Actif) est plus lisible