Question Différentes façons d'écrire la déclaration "if" [close]


J'ai vu différentes manières d'écrire un if déclaration.

Lequel préférez-vous et pourquoi?

Exemple 1:

if (val % 2 == 1){output = “Number is odd”;}else{output = “Number is even”;} 

Exemple 2:

if (val % 2 == 1)
{
    output = “Number is odd”;
}
else
{
   output = “Number is even”;
}

Exemple 3:

if (val % 2 == 1)
output = “Number is odd”;
else
output = “Number is even”;

Exemple 4:

if (val % 2 == 1){
output = “Number is odd”;
} else {
output = “Number is even”;
}

Question similaire:

Pourquoi est-ce considéré comme une mauvaise pratique d'omettre les accolades?


20


origine


Réponses:


Pour des cas comme celui-ci, il y a aussi l'opérateur conditionnel:

output = (val % 2 == 1) ? "Number is odd" : "Number is even";

Si vous allez certainement utiliser un "si", j'utiliserais la version 2 ou la version 4, en fonction du reste de votre style. (Au travail, j'utilise 4; pour les projets personnels, j'utilise 2.) L'essentiel est qu'il y ait des accolades même autour d'une seule déclaration.

BTW, pour tester la parité, il est légèrement plus rapide à utiliser:

if ((val & 1) == 1)

44



Version 2. J'inclus toujours les crochets parce que si vous avez besoin de placer plus d'une ligne sous le conditionnel, vous n'aurez pas à vous soucier de mettre les crochets à une date ultérieure. Cela, et il s'assure que toutes vos instructions if ont la même structure, ce qui aide lorsque vous analysez le code pour une certaine instruction if.


17



J'utilise la version 2.

Une des raisons d'utiliser des accolades devient plus claire si vous n'en avez pas d'autre.

if(SomeCondition)
{
  DoSomething();
}

Si vous devez ensuite ajouter une autre ligne de code, vous risquez moins d'avoir un problème:

if(SomeCondition)
{ 
  DoSomething();
  DoSomethingElse();
}

Sans les accolades vous pourrait ont fait ceci:

if(SomeCondition)
   DoSomething();
   DoSomethingElse();

11



Personnellement, je préfère 3. Les accolades supplémentaires ajoutent trop de bruit visuel inutile et d’espaces blancs.

Je peux quelque peu voir le raisonnement des 2/4 pour réduire les bugs, mais personnellement, je n'ai jamais eu de bogue parce que penser que des lignes supplémentaires se trouvaient dans une instruction if. J'utilise C # et Visual Studio donc mon code reste toujours bien formaté. Cela pourrait cependant être un problème si j'étais un programmeur de style plus bloc-notes.


9



Aucune de ces réponses.

Si mon bloc d'exécution ne comporte qu'une seule ligne (même s'il s'agit d'une déclaration énorme), je n'utilise pas d'accolades, mais je faire indenter, similaire à # 3

if (num > 3)
     print "num is greater than 3";
else
     print "num is not greater than 3";

Un exemple avec plusieurs instructions qui n'ont pas besoin d'accolades:

if (num > 3)
    for (int i = 0; i < 100)
        print i + "\n";
else
    print "booya!";

Cela dit, la réponse de Jon Skeet à cette question est la meilleure.


5



Je préfère # 2. Lisibilité facile


5



Je suis d'accord avec l'opérateur ternaire. Très peu utilisé dans le code que je rencontre, et je pense qu'il est beaucoup plus facile et plus agréable de lire que tous les crochets et les retraits supplémentaires nécessaires pour écrire une instruction if / else.


3



Il est plus important d'être cohérent que de choisir le meilleur.

Ces styles ont différents avantages et inconvénients, mais aucun n’est aussi mauvais que de les mélanger au sein d’un projet ou même d’une unité de compilation ou au sein d’une fonction.


L'opérateur ternaire est le choix évident pour ce code spécifique. Pour une simple déclaration simple if/elsequi ne peut pas être exprimé autrement, je préférerais un cas 3 correctement indenté:

if (val % 2 == 1)
    output = “Number is odd”;
else
    output = “Number is even”;

Je comprends la motivation derrière "toujours utiliser des accolades", mais je n'ai personnellement jamais été mordu par leur omission (OK, une fois. Avec une macro.)

Parmi les styles ci-dessus, je choisirais (2). (4) serait correct si "correctement" en retrait.
(1) J'attribuerais à un jeune développeur qui, espérons-le, va sortir de "code compact", ou de quelqu'un qui ne peut pas se permettre un moniteur décent. Pourtant, je vais avec elle si c'était le style local.


3