Я часто видел это в нашей унаследованной системе - функции, которые работают примерно так:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Другими словами, функция состоит из двух частей. Первая часть выполняет какую-то обработку (потенциально содержащую циклы, побочные эффекты и т. Д.), И по ходу дела может установить флаг «todo». Вторая часть выполняется только в том случае, если был установлен флаг «todo».
Это кажется довольно уродливым способом сделать что-то, и я думаю, что большинство случаев, которые я потратил на это время, можно было бы изменить, чтобы избежать использования флага. Но действительно ли это анти-паттерн, плохая идея или совершенно приемлемый?
Первой очевидной рефакторизацией было бы разделить ее на два метода. Однако мой вопрос больше касается того, существует ли когда-либо необходимость (в современном языке OO) создать переменную локального флага, потенциально установить ее в нескольких местах, а затем использовать ее позже, чтобы решить, выполнять ли следующий блок кода.
["blacklisted-domain","suspicious-characters","too-long"]
который показывает, что применено несколько причин.