Eu já vi isso muito em nosso sistema legado em funcionamento - funções que são mais ou menos assim:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Em outras palavras, a função possui duas partes. A primeira parte realiza algum tipo de processamento (potencialmente contendo loops, efeitos colaterais etc.) e, ao longo do caminho, pode definir o sinalizador "todo". A segunda parte é executada apenas se o sinalizador "todo" tiver sido definido.
Parece uma maneira muito feia de fazer as coisas, e acho que a maioria dos casos que realmente demorei a entender, poderia ser refatorada para evitar o uso da bandeira. Mas isso é um anti-padrão real, uma má idéia ou perfeitamente aceitável?
A primeira refatoração óbvia seria dividi-la em dois métodos. No entanto, minha pergunta é mais sobre se existe a necessidade (em uma linguagem OO moderna) de criar uma variável de flag local, potencialmente configurando-a em vários locais e, em seguida, usá-la posteriormente para decidir se deve executar o próximo bloco de código.
["blacklisted-domain","suspicious-characters","too-long"]
essa que mostra que várias razões foram aplicadas.