Ho visto molte cose 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 il percorso 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 in cui ho effettivamente avuto il tempo di capire, potrebbero essere rifattorizzati per evitare di usare la bandiera. Ma questo è un vero anti-modello, una cattiva idea o perfettamente accettabile?
La prima ovvia rifattorizzazione sarebbe quella di dividerlo in due metodi. Tuttavia, la mia domanda è di più sul fatto che sia mai necessario (in un linguaggio OO moderno) creare una variabile flag locale, potenzialmente impostandola in più punti, e quindi usarla in un secondo momento per decidere se eseguire il prossimo blocco di codice.