J'ai beaucoup vu cela dans notre système hérité au travail - des fonctions qui ressemblent à ceci:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
En d'autres termes, la fonction comporte deux parties. La première partie fait une sorte de traitement (contenant potentiellement des boucles, des effets secondaires, etc.), et en cours de route, elle pourrait définir le drapeau "todo". La deuxième partie n'est exécutée que si le drapeau "todo" a été défini.
Cela semble être une façon assez moche de faire les choses, et je pense que la plupart des cas que j'ai pris le temps de comprendre pourraient être refactorisés pour éviter d'utiliser le drapeau. Mais est-ce un véritable anti-modèle, une mauvaise idée ou parfaitement acceptable?
La première refactorisation évidente serait de la découper en deux méthodes. Cependant, ma question est plus de savoir s'il y a jamais un besoin (dans un langage OO moderne) de créer une variable de drapeau local, en la définissant potentiellement à plusieurs endroits, puis en l'utilisant plus tard pour décider d'exécuter ou non le prochain bloc de code.
["blacklisted-domain","suspicious-characters","too-long"]
celle-ci qui montre que plusieurs raisons s'appliquent.