Упрощение условных выражений

Логика условного выполнения имеет тенденцию становиться сложной, поэтому ряд рефакторингов направлен на то, чтобы упростить ее.

Разбиение условного оператора

Проблема: У вас есть сложный условный оператор (if-then/else или switch).

Решение: Выделите в отдельные методы все сложные части оператора: условие, then и else.

Объединение условных операторов

Проблема: У вас есть несколько условных операторов, ведущих к одинаковому результату или действию.

Решение: Объедините все условия в одном условном операторе.

Объединение дублирующихся фрагментов в условных операторах

Проблема: Одинаковый фрагмент кода находится во всех ветках условного оператора.

Решение: Вынесите его за рамки оператора.

Удаление управляющего флага

Проблема: У вас есть булевская переменная, которая играет роль управляющего флага для нескольких булевских выражений.

Решение: Используйте break, continue и return вместо этой переменной.

Замена вложенных условных операторов граничным оператором

Проблема: У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.

Решение: Выделите все проверки специальных или граничных случаев выполнения в отдельные условия и поместите их перед основными проверками. В идеале, вы должны получить «плоский» список условных операторов, идущих один за другим.

Замена условного оператора полиморфизмом

Проблема: У вас есть условный оператор, который, в зависимости от типа или свойств объекта, выполняет различные действия.

Решение: Создайте подклассы, которым соответствуют ветки условного оператора. В них создайте общий метод и переместите в него код из соответствующей ветки условного оператора. Впоследствии замените условный оператор на вызов этого метода. Таким образом, нужная реализация будет выбираться через полиморфизм в зависимости от класса объекта.

Введение Null-объекта

Проблема: Из-за того, что некоторые методы возвращают null вместо реальных объектов, у вас в коде присутствует множество проверок на null.

Решение: Вместо null возвращайте Null-объект, который предоставляет поведение по умолчанию.

Введение проверки утверждения

Проблема: Корректная работа участка кода предполагает наличие каких-то определённых условий или значений.

Решение: Замените эти предположения конкретными проверками.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...