Pourquoi le retrait manquant à l’imho du mot-clé "case" - dans une instruction switch est-il considéré comme un bon style?
aucune indentation du mot clé "case" ne semble être l'option de formatage par défaut dans à peu près tous les IDE:
switch (i){
case 0:
break;
case 1:
break;
}
alors que je trouve ce format plus intuitif:
switch (i){
case 0:
break;
case 1:
break;
}
Y a-t-il une logique derrière cela, qui m'échappe?
Les cas sont logiquement des étiquettes. Beaucoup de gens mettent des étiquettes au même niveau d'indentation que le bloc dans lequel elles se trouvent. À mon avis, de cette façon, il est plus facile de lire le texte.
Je le compare avec une chronologie que vous pouvez parcourir. Vous avez des marqueurs sur la ligne de temps elle-même, pas en retrait dans le contenu. Vous pouvez ensuite indiquer rapidement où se trouvent les étiquettes/marqueurs, sans éloigner votre œil de la ligne de base.
En 4 mots: pas de blocs, pas de retrait .
Les cas n'ouvrent pas de bloc. En C ou C++, vous pouvez même mettre des déclarations de variables (mais les initialiseurs ne sont pas appelés, sauf pour les variables statiques, c'est un piège) au début du bloc de commutation. Vous pouvez faire beaucoup de choses étranges avec switch
, comme l'appareil de Duff .
Par conséquent, comme les cas ne sont que des étiquettes, les mettre en retrait ne semble pas aussi intuitif, et ne pas mettre en retrait est le style choisi par la plupart des styles.
L'Oracle officiel 1999 Conventions de code pour le Java TM Programming Language (section 7.8) recommande un style de commutateur où les instructions case ne sont pas en retrait par rapport à l'instruction switch dans son ensemble) .
Il s'agit d'un choix subjectif, mais Sun a décidé qu'il valait mieux que tout le monde s'en tienne à un style, et il a choisi celui-ci.
Il existe différents styles d'indentation parmi lesquels choisir. AFAIK, aucun n'est considéré comme un meilleur style que les autres tant que vous utilisez systématiquement un style d'indentation. Pour moi, l'indentation des étiquettes case
est plus lisible, il en va de même pour les étiquettes private
, protected
et public
dans les classes, cependant, mon IDE ne fera pas l'indentation à ma façon. Mon code n'est pas aussi lisible que je le souhaiterais. Oh bien ...
Peut-être est-ce pour garder le même niveau d'indentation que son équivalent logique exprimé en if
statments? C'est:
switch(i){
case 0:
//do something 1
case 1:
//do something 2
}
Serait similaire à son équivalent logique:
if(i==0){
//do something 1
}else if(i==1){
//do something 2
}