Widziałem to często w naszym starszym systemie w pracy - funkcje, które wyglądają mniej więcej tak:
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
Innymi słowy, funkcja składa się z dwóch części. Pierwsza część wykonuje jakieś przetwarzanie (potencjalnie zawierające pętle, efekty uboczne itp.), A po drodze może ustawić flagę „todo”. Druga część jest wykonywana tylko wtedy, gdy ustawiono flagę „todo”.
Wydaje się to dość brzydkim sposobem robienia rzeczy i myślę, że większość przypadków, które właściwie poświęciłem czas na zrozumienie, można by zreorganizować, aby uniknąć używania flagi. Ale czy to faktyczny anty-wzór, zły pomysł, czy całkowicie akceptowalny?
Pierwszą oczywistą refaktoryzacją byłoby pocięcie go na dwie metody. Jednak moje pytanie dotyczy bardziej tego, czy kiedykolwiek trzeba (w nowoczesnym języku OO) utworzyć zmienną flagi lokalnej, potencjalnie ustawiając ją w wielu miejscach, a następnie używając jej później, aby zdecydować, czy wykonać następny blok kodu.
["blacklisted-domain","suspicious-characters","too-long"]
pokazującą, że zastosowano kilka powodów.