Удаление управляющего флага.
У вас есть булевская переменная, которая играет роль управляющего флага для нескольких булевских выражений.
Используйте break, continue и return вместо этой переменной.
##Пример
void checkSecurity(String[] people) {
boolean found = false;
for (int i = 0; i < people.length; i++) {
if (!found) {
if (people[i].equals("Don")) {
sendAlert();
found = true;
}
if (people[i].equals("John")) {
sendAlert();
found = true;
}
}
}
}void checkSecurity(String[] people) {
for (String person : people) {
if (person.equals("Don") || person.equals("John")) {
sendAlert();
return;
}
}
}##Зачем делать рефакторинг
Управляющие флаги пришли к нам из тех «бородатых» дней, когда хорошим стилем программирования считалось иметь в функции одну входную точку (строку объявления функции) и одну выходную точку (в самом конце функции).
В современных языках программирования этот подход устарел, так как у нас появились специальные операторы для управления ходом программы в циклах и других сложных конструкциях:
-
break: останавливает выполнение цикла; -
continue: останавливает выполнение текущего витка цикла и переходит к проверке условия цикла и следующей итерации; -
return: останавливает выполнение всей функции и возвращает её результат, если он подан в этом операторе.
##Преимущества
- Код с управляющим флагом зачастую получается значительно более запутанным, чем при использовании операторов управления выполнением.
##Как делать рефакторинг
-
Найдите присваивание значения управляющему флагу, которое приводит к выходу из цикла или текущей итерации.
-
Замените его на
break, если это выход из цикла, илиcontinue, если это выход из итерации, илиreturn, если нужно вернуть это значение из функции. -
Уберите весь остальной код и проверки, связанные с управляющим флагом.