Вот мой дубль.
Код с использованием флагов:
...
if (dogIsBarking && smellsBad) {
cleanupNeeded = true;
}
doOtherStuff();
... many lines later
if (cleanupNeeded) {
startCleanup();
}
...
Очень нечисто. Программист просто кодирует в любом порядке, в котором ему об этом говорит разум. Он просто добавил код в случайном месте, чтобы напомнить себе, что очистка нужна позже ... Почему он этого не сделал:
...
doOtherStuff();
... many lines later
if (dogIsBarking && smellsBad) {
startCleanup();
}
...
И, следуя совету Роберта Мартина (Чистый код), может преобразовать логику в более осмысленный метод:
...
doSomeStuff();
... many lines later
if (dogTookADump()) {
startCleanup();
}
...
boolean dogTookADump() {
return (dogIsBarking && smellsBad);
}
Итак, я видел много-много кода, в котором можно было бы следовать простым правилам, подобным приведенным выше, но люди продолжают добавлять сложности и флаги без причины! Теперь есть законные случаи, когда флаги могут понадобиться, но в большинстве случаев это один стиль, который программисты перенесли из прошлого.