Упрощение условных выражений
Логика условного выполнения имеет тенденцию становиться сложной, поэтому ряд рефакторингов направлен на то, чтобы упростить ее.
Проблема: У вас есть сложный условный оператор (if-then
/else
или switch
).
Решение: Выделите в отдельные методы все сложные части оператора: условие, then
и else
.
Проблема: У вас есть несколько условных операторов, ведущих к одинаковому результату или действию.
Решение: Объедините все условия в одном условном операторе.
Проблема: Одинаковый фрагмент кода находится во всех ветках условного оператора.
Решение: Вынесите его за рамки оператора.
Проблема: У вас есть булевская переменная, которая играет роль управляющего флага для нескольких булевских выражений.
Решение: Используйте break
, continue
и return
вместо этой переменной.
Проблема: У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.
Решение: Выделите все проверки специальных или граничных случаев выполнения в отдельные условия и поместите их перед основными проверками. В идеале, вы должны получить «плоский» список условных операторов, идущих один за другим.
Проблема: У вас есть условный оператор, который, в зависимости от типа или свойств объекта, выполняет различные действия.
Решение: Создайте подклассы, которым соответствуют ветки условного оператора. В них создайте общий метод и переместите в него код из соответствующей ветки условного оператора. Впоследствии замените условный оператор на вызов этого метода. Таким образом, нужная реализация будет выбираться через полиморфизм в зависимости от класса объекта.
Проблема: Из-за того, что некоторые методы возвращают null
вместо реальных объектов, у вас в коде присутствует множество проверок на null
.
Решение: Вместо null
возвращайте Null-объект, который предоставляет поведение по умолчанию.
Проблема: Корректная работа участка кода предполагает наличие каких-то определённых условий или значений.
Решение: Замените эти предположения конкретными проверками.