Lo he visto mucho en nuestro sistema heredado en el trabajo, funciones que se parecen a esto:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
En otras palabras, la función tiene dos partes. La primera parte realiza algún tipo de procesamiento (que potencialmente contiene bucles, efectos secundarios, etc.) y, en el camino, puede establecer el indicador "todo". La segunda parte solo se ejecuta si se ha establecido el indicador "todo".
Parece una forma bastante fea de hacer las cosas, y creo que la mayoría de los casos que realmente me he tomado el tiempo para entender, podrían ser refactorizados para evitar usar la bandera. ¿Pero es este un antipatrón real, una mala idea o perfectamente aceptable?
La primera refactorización obvia sería cortarla en dos métodos. Sin embargo, mi pregunta es más sobre si alguna vez es necesario (en un lenguaje OO moderno) crear una variable de bandera local, posiblemente configurándola en varios lugares, y luego usarla más tarde para decidir si ejecutar el siguiente bloque de código.
["blacklisted-domain","suspicious-characters","too-long"]
esa que muestra que se aplicaron varias razones.