177 votes

C'est une mauvaise pratique d'utiliser un if sans crochets?

J'ai vu un code comme ceci:

if(statement)
    do this;
else
    do this;

Je n'aime pas ça, je pense que c'est plus propre et plus lisible

if(statement){
    do this;
}else{
    do this;
}

Est-ce simplement une question de préférence ou ce serait une façon d'être conseillé sur l'autre?

277voto

clee Points 5565

Le problème avec la première version, c'est que si vous revenez en arrière et ajouter une deuxième déclaration de l'if ou else clauses, sans se souvenir d'ajouter des accolades, votre code sera briser dans l'inattendu et amusant les moyens.

Maintenabilité-sage, il est toujours plus intelligent d'utiliser la deuxième forme.

EDIT: Nie de points dans les commentaires, mais il vaut la peine de lier ici, aussi, je pense. Ceci n'est pas une tour d'ivoire hypothétique des conneries: https://www.imperialviolet.org/2014/02/22/applebug.html

147voto

doynax Points 1159

Un problème avec le laissant sortir des blocs d'instruction est l'autre-de l'ambiguïté. Qui est C-inspiré langues ignorer l'indentation et n'ont donc pas moyen de séparer ce:

if(one)
    if(two)
        foo();
    else
        bar();

À partir de ceci:

if(one)
    if(two)
        foo();
else
    bar();

45voto

Matchu Points 37755

Mon modèle général est que si elle tient sur une seule ligne, je vais le faire:

if(true) do_something();

Si il y a une clause else, ou si le code que je veux exécuter sur true est d'une longueur considérable, croisillons tout le chemin:

if(true) {
    do_something_and_pass_arguments_to_it(argument1, argument2, argument3);
}

if(false) {
    do_something();
} else {
    do_something_else();
}

En fin de compte, il s'agit d'une question subjective de style et de lisibilité. La programmation générale du monde, cependant, la grande majorité se divise en deux parties (pour les langues qui utilisent des accolades): soit les utiliser tout le temps, sans exception, ou de les utiliser tout le temps, sauf exception. Je suis partie de ce dernier groupe.

11voto

Pentium10 Points 68884

Je suis en utilisant le formateur de code de l'IDE que j'utilise. Qui peut-être différent, mais il peut être configuré dans les Préférences/Options.

J'aime celui-ci:

if (statement)
{
    // comment to denote in words the case
    do this;
    // keep this block simple, if more than 10-15 lines needed, I add a function for it
}
else
{
    do this;
}

9voto

Matt Bishop Points 1187

Avoir les accolades dès le premier moment devrait vous aider à vous empêcher de jamais avoir de débogage:

if (statement)
     do this;
else
     do this;
     do that;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X