L'ho visto molto nel nostro sistema legacy al lavoro - funzioni che vanno in questo modo:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
In altre parole, la funzione ha due parti. La prima parte esegue una sorta di elaborazione (potenzialmente contenente loop, effetti collaterali, ecc.) E lungo la strada potrebbe impostare il flag "todo". La seconda parte viene eseguita solo se è stato impostato il flag "todo".
Sembra un modo piuttosto brutto di fare le cose, e penso che la maggior parte dei casi che ho davvero avuto il tempo di capire, potrebbe essere riformulata per evitare di usare la bandiera. Ma è un vero anti-pattern, una cattiva idea o perfettamente accettabile?
La prima ovvia rifattorizzazione sarebbe quella di tagliarla in due metodi. Tuttavia, la mia domanda è più se c'è mai la necessità (in un moderno linguaggio OO) di creare una variabile flag locale, potenzialmente impostarla in più posizioni, e poi usarla in seguito per decidere se eseguire il blocco di codice successivo.
["blacklisted-domain","suspicious-characters","too-long"]
che mostra che sono stati applicati diversi motivi.