Probablement. Le cerveau humain a un espace de pile limité, ce qui rend difficile la gestion de structures profondément imbriquées. Tout ce qui aplatit l'information que nous sommes censés analyser en facilite la compréhension.
De même, je préfère normalement ceci:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
}
/* Do some work */
return true;
}
à ceci:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
} else {
/* Do some work */
return true;
}
}
Ou pire, à ceci:
bool foo(int arg)
{
if(arg) {
/* Do some work */
return true;
} else {
/* arg can't be 0 */
return false;
}
}
Dans le dernier exemple, la partie qui fait le travail pourrait être assez long. Au moment où le lecteur arrive à la clause else, il peut ne pas se souvenir comment il est arrivé là. Mettre les conditions de renflouement au plus près du début permet de s'assurer que les personnes qui essaient d'appeler vos fonctions auront une bonne idée des entrées attendues par la fonction. De plus, comme d'autres l'ont souligné, la continuation indique clairement qu'il n'est pas nécessaire de lire davantage le code dans la boucle pour déterminer si un traitement supplémentaire est effectué après ce point pour ce cas, ce qui facilite le suivi du code. . Encore une fois, moins vous forcez le lecteur à garder une trace, mieux c'est.
ce peut soutenir - cela dépend si cet idiome est commun dans votre code. Si ce n'est pas le cas, il présente l'inconvénient d'être un moyen inhabituel de contrôler une boucle, et un problème potentiel de maintenance/source de bogue. –
oui, c'est tout à fait correct. Les gens qui ne sont pas habitués à cet idiome peuvent être confus lorsqu'ils sont confrontés à son maintien. C'est juste ce que je suis habitué et ce que l'heuristique m'a appris est meilleur. C'est plus facile pour moi de me perdre dans des blocs imbriqués si-alors-alors pour remarquer une pause; ou continuer; –