66 votes

Comment doit-on commenter un if-else structure?

Disons que vous avez:

if(condition) {
    i = 1;
} else {
    i = 2;
}

et vous avez besoin de mettre des commentaires expliquant if et else blocs. Quel est le plus lisible de faire en sorte que quelqu'un peut facilement ramasser au premier coup d'œil?

J'ai l'habitude de faire comme ceci:

//check for condition
if(condition) {
    i = 1;
} else {
    //condition isn't met
    i = 2;
}

je la trouve pas assez bon que les commentaires sont situés à différents niveaux, au premier coup d'œil, vous serait tout simplement ramasser if de commentaire et d' else commentaire ressemblerait elle appartient à une structure intérieure.

Les mettre comme ceci:

if(condition) {
    //check for condition
    i = 1;
} else {
    //condition isn't met
    i = 2;
}

n'a pas l'air bon pour moi, comme il semblerait, comme l'ensemble de la structure n'est pas commenté (condition pourrait être grand et de prendre plusieurs lignes).

Quelque chose comme ça:

//check for condition
if(condition) {
    i = 1;
//condition isn't met
} else {
    i = 2;
}

serait probablement le meilleur style de commentaires point de vue, mais à confusion, comme une structure de code.

Comment avez-vous commenter ces blocs?

PS. Je ne demande pas à propos de refactoring de ces deux lignes de code, uniquement sur le code de style et de commenter la mise en forme.

31voto

MrBliss Points 1

Si il est nécessaire de commenter si else, je préfère décrire le cas de ce que fait le code en arriver à ce point. En particulier dans le code avec une haute complexité cyclomatique

if(condition) { 
//e.g user is taking a course at college x
    i = 1;
} else { 
//e.g user is not taking any course at college x
    i = 2;
}

23voto

David Johnstone Points 10565

Une autre option est la suivante:

if(condition) { //check for condition
    i = 1;
} else { //condition isn't met
    i = 2;
}

13voto

Preet Sangha Points 39414

Vous devez seulement d'annoter si le code n'est pas explicite. Faites donc en sorte que si explicites. Comme ça peut-être

bool fooIsNotReallyGood = ....;

if(fooIsNotReallyGood) {
...
} else {
...
}

10voto

BalusC Points 498232

Si le code n'est pas déjà auto-documenter, puis je voudrais structure comme suit:

// If some condition, then do stuff 1.
if (someCondition) {
    doStuff1();
}

// Else do stuff 2.
else {
    doStuff2();
}

Mais encore une fois, il n'a pas beaucoup de sens si le code est déjà auto-documentation. Si vous souhaitez ajouter des commentaires à cause de certaines condition complexe comme:

if (x == null || x.startsWith("foo") || x.endsWith("bar") || x.equals("baz")) {
    doStuff1();
} else {
    doStuff2();
}

Ensuite, je voudrais envisager de refactoriser le code comme:

boolean someCondition = (x == null || x.startsWith("foo") || x.endsWith("baz") || x.equals("waa");

if (someCondition) {
    doStuff1();
} else {
    doStuff2();
}

Dans lequel le nom de la variable someCondition en réalité résume l'ensemble de l'état dans une coquille de noix. E. g. usernameIsValid, userIsAllowedToLogin ou plus.

5voto

Chris Knight Points 7946

Aller pour l'auto-commenter les conditions,puis des commentaires supplémentaires ne sont pas nécessaires. Disons que la condition est que le montant maximum du prêt-valeur est atteinte. Ce qui nous donne:

if (maximumLoanToValueIsReached)
{
   i=1;
}
else
{
   i=2;
}

Pas besoin de préciser lorsque i=2 que le montant maximum du prêt-valeur n'a pas été atteint car c'est de l'auto explanitory. En aparté, je voudrais aussi renommer i quelque chose de plus significatif.

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