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