2010-08-30 8 views
8

Possible en double (foo!):
What is the preferred way to write boolean expressions in Javales meilleures pratiques: if (foo == false) ou si

Aujourd'hui, moi et mon collègue ratissé un argument. Quelle est la meilleure façon d'utiliser les variables booléennes dans le code Java avec les instructions if.

boolean foo=true 
//1. 

if(foo == false) 
    // do something 
else 
    // do something else 

//2. 

if(!foo) 
    // do something 
else 
    // do something else 

Je supporte [1], car je pense que c'est plus lisible. Qu'est-ce que vous en pensez?

+0

double exact de [Quel est le meilleur moyen d'écrire des expressions booléennes en Java] (http://stackoverflow.com/questions/2409378/what-is-the-preferred-way-to-write -boolean-expressions-in-java) –

+0

Ok, maintenant je dois concéder à l'opinion de mon ami (et vous les gars). Merci à vous tous pour votre participation rapide. :) – pavanlimo

+2

Si vous soutenez 1, pourquoi s'arrêter là? La réduction ad absurdum exige que vous utilisiez 'if (((foo == false) == true) == true) == true) ...'. – paxdiablo

Répondre

12

numéro 2, ainsi que "foo" ayant un nom descriptif, de sorte que le code se lit bien:

if (!hasPurple) ...

+0

Oui, mieux les variables nommées sont définitivement le chemin à parcourir. Devient plus lisible. – drekka

0

Je pars pour 2 car en tant que programmeur, même 2 est lisible. Imaginez que vous ayez des centaines de vérifications de validation de ce type, vérifiez toujours avec false.

Pas

0

Si vous êtes le seul qui va maintenir votre code, vous êtes libre d'utiliser le style que vous aimez. Après avoir dit que! Foo est favorisé par la plupart des développeurs que je connais.

0

C'est une question d'opinion. Je préfère le numéro 2 parce que c'est moins de code à écrire et je pense que c'est aussi lisible.

6

Je trouve # 2 plus lisible. Je pense que tous les développeurs Java (je suis un développeur C#) sauraient quoi! veux dire. I

Bien que ce ne soit probablement pas le point ici, je préfère mettre mon "vrai" bloc comme énoncé. Si la condition va généralement être faux, alors je nomme ma variable pour représenter

if (notFoo) 
    // do something when 
else 
    // do something else 
+1

Je ne suis pas d'accord. Les variables booléennes doivent être nommées de manière assertive lorsque cela est possible. Vous devriez être capable de toujours lire! comme "non", et si vous avez besoin de foo, vous évitez le double négatif confus! notFoo. La seule exception est quand foo a un antonyme (comme convexe ou concave). – ILMTitan

+0

Les doubles négatifs acceptés sont mauvais :) Mais alors, si vous utilisez purement if-else,! NotFoo serait simplement nommé Foo :) –

4

Je trouve une bonne idée d'éviter des choses comme

if (foo == true){}

parce que vous pouvez parfois écrire

if (foo = true){}

comme erreur typographique. Souvent, c'est une erreur facile à repérer, mais cela semble se prêter à une erreur rapide.

+0

'if (foo = true) {}' n'est pas Java légal et ne compilera pas (et devrait se démarquer comme une mauvaise syntaxe dans votre IDE). Avoir peur des instructions 'if (var = constant)' est un mauvais report de C, où il était légal (et parfois encouragé) d'assigner dans le conditionnel. Arrêtez de vous en inquiéter, et vous inquiétez plutôt de ce qui est plus lisible. – Avi

+1

@Avi: Il compile en effet sous JDK6. Je vous ai donné le bénéfice du doute et l'ai écrit moi-même. Il compile sans avertissement sur les deux lignes de commande sur une machine FreeBSD et Eclipse, et Eclipse ne montre aucun avertissement. – JBirch

+0

vous avez raison. Je m'excuse. J'étais confus, car la plupart des expressions d'affectation sont illégales dans les conditions, à moins qu'elles ne soient de type boolean (car il n'y a pas de conversion automatique int-to-boolean ou point-to-boolean en Java). Je voudrais encore aller avec le plus lisible cependant. Dans le cas des entiers, j'écrirais 'if (foo == CONSTANT)'; dans le cas des booléens, j'écrirais simplement 'if (foo)' qui est à la fois plus lisible et évite ce problème. – Avi

0

Lorsque vous utilisez une variable booléenne comme condition dans l'instruction, ne la comparez pas à true.

Pas une erreur, mais un mauvais style, Comme c'est déjà une valeur booléenne, alors il suffit de l'utiliser.

Raisons pour lesquelles "! Foo" vaut mieux que "foo == false".Référencé from

  • Concision: en supposant que vous êtes dans un contexte où un booléen est
    nécessaire, et « x » est un booléen, il est moins de caractères pour écrire « x » que « x
    = = true ", ou"! x "que" x == false ".

  • Convention: les programmeurs chevronnés en Java (ou C, C++, C# et la plupart des autres
    langues) attendent de voir "x" plutôt
    que "x == true" et "x!" Plutôt
    que "x == false".

  • Robustesse: en Java les instructions conditionnelles et boucle tous nécessitent une
    expression booléenne valeur dans la
    condition. Si "y" n'est pas un booléen, alors une faute de frappe de la forme "if (y = foo) {" donnera une erreur de compilation dans
    Java. Mais si "y" est un booléen alors
    "if (y = foo) {" ne donne pas une erreur de compilation
    . Par conséquent, en évitant "==" pour les booléens vous évitez de définir
    vous-même pour toute une série de bugs
    résultant de fautes de frappe.

+3

-1 pour la pâte de copie ** intégrale ** de [la réponse de Stephen] (http://stackoverflow.com/questions/1451152/difference-between-x-false-and-while-x-in-java/1453172 # 1453172).Tout d'abord, même s'il y a un lien, vous faites apparaître le contenu comme si c'était le vôtre, ou reformulé, alors que ce n'est pas le cas. Formatez-le comme cité, il n'y a donc pas d'ambiguïté. Deuxièmement, si la réponse collée est appropriée, alors la question est très probablement un doublon et devrait être fermée en tant que telle. À la fin, c'est juste une mauvaise pratique. –

+0

@Pascal Thivent Pour ma réponse, j'ai ajouté mon point de vue (les 2 premières lignes en gras) ainsi que la section référencée ajoutée de Stephen.J'ai aussi ajouté un lien où il a été référencé. Je n'avais pas l'intention de montrer que la section référencée était mon point de vue. Je suis désolé si c'était le cas. J'ai supprimé l'ambiguïté et l'ai citée clairement. – YoK

+0

Merci d'avoir supprimé l'ambiguïté. Je pense vraiment qu'il est important de maximiser la transparence et je vais supprimer mon downvote. –

Questions connexes