Est else while
Sans les accolades intervenantes considérées comme une maintenance "sûre" sage?
L'écriture if-else
code sans accolades comme ci-dessous ...
if (blah)
foo();
else
bar();
... Pays un risque car le manque d'accolades facilite la modification de la signification du code par inadvertance.
Cependant, est inférieur à risque?
if (blah)
{
...
}
else while (!bloop())
{
bar();
}
Ou est else while
Sans accolades intervenantes considérées comme "sûre"?
Cela me rappelle ce code:
if ( ... ) try {
..
} catch (Exception e) {
..
} else {
...
}
Chaque fois que vous combinez deux types de blocs, oubliez les accolades et non plus d'indentation, vous créez un code très difficile à comprendre et à entretenir.
Je voudrais Méthode d'extraction et faites-la
if ( blah )
{
...
}
else
{
newMethod();
}
Voir l'approche "méthode d'extraction" expliquée à catalogue de refactoring Site:
Vous avez un fragment de code qui peut être regroupé.
Tournez le fragment en une méthode dont le nom explique le but de la méthode.
void printOwing() { printBanner(); //print details System.out.println ("name: " + _name); System.out.println ("amount " + getOutstanding()); }
void printOwing() { printBanner(); printDetails(getOutstanding()); } void printDetails (double outstanding) { System.out.println ("name: " + _name); System.out.println ("amount " + outstanding); }
Qu'est-ce qui a tellement mal avec les accolades que tant de gens essaient d'éviter de les écrire?
Quel problème fait exactement else while
résoudre ?
Les accolades sont bon marché et bon, et ils rendent l'intention de code évidente et plaine par opposition à intelligente et spirituelle.
Citant la philosophie UNIX:
Étant donné que la maintenance est si importante et si chère, écrivez des programmes comme si la communication la plus importante qu'ils effectuent ne sont pas à l'ordinateur qui les exécute, mais aux êtres humains qui liront et maintiennent le code source à l'avenir (y compris vous-même).
J'ai toujours mis des accolades, juste parce que vous pourriez ajouter une autre ligne lorsque vous vous êtes pressé, indentez-le, oubliez les accolades et grattez votre tête ce qui se passe. Je garde le support d'ouverture sur la même ligne, mais cela n'a pas d'importance. Je les deux cas, il vaut mieux les avoir.
if(blah) {
foo();
}
else {
bar();
}
Il n'y a rien de mal à
if (blah)
foo();
else
bar();
juste comme s'il n'y a rien de mal avec
if (blah) foo(); else bar();
dans les bonnes circonstances (votre situation peut varier, mais ce style particulier est mieux utilisé lorsque vous avez beaucoup de code répétitif - alors la vue de chaque ligne est plus importante que l'indentation stylistique)
Mais si vous choisissez une façon, conservez-y - la cohérence est roi. Donc, votre deuxième exemple est très mauvais, car l'expression IF avait des crochets pour sa déclaration, la déclaration tandis que la déclaration doit être à l'intérieur des supports de la clause d'enseigne, non pas à l'extérieur.
en outre, j'ai déjà vu ce code:
if (x) foo()
{
bar();
}
et il a été écrit par la norme de codage Nazi lui-même (qui a insisté sur des supports pour tout).
Les IDes modernes peuvent facilement être configurés pour reformater (y compris l'élimination ou l'ajout d'accolades inutiles) et/ou réindentifier le code sur la sauvegarde d'un fichier. Ainsi, votre exemple ressemblerait automatiquement par exemple
if (blah) {
blub();
} else
while (!bloop()) {
bar();
}
L'indentation rend toujours la nidification facilement visible, même sans accolades non ccessioires. Donc, si vous parvenez à appliquer tels IDE Paramètres, je ne vois aucun risque.
Personnellement, je trouve du code qui omet les accolades et les chevrefreaux beaucoup plus lisibles car cela évite l'encombrement:
if (blah) blub();
else while (!bloop()) bar();
Mais bien sûr, de nombreux développeurs sont très heureux de discuter de telles choses pour toujours et une journée.