Логотип ConstructiCat
CodeBust.
Навигация по разделу ▾

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

Проблема

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

Решение

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

##Пример

До
double disabilityAmount() {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // Расчёт размера пособия по инвалидности.
  // ...
}
После
double disabilityAmount() {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // Расчёт размера пособия по инвалидности.
  // ...
}

boolean isNotEligibleForDisability() {
  return seniority < 2 || monthsDisabled > 12 || isPartTime;
}

##Зачем делать рефакторинг

Код содержит множество чередующихся операторов, которые выполняют одинаковые действия. Причина разделения операторов неочевидна.

Главная цель объединения операторов — извлечь условие оператора в отдельный метод, упростив его понимание.

##Преимущества

  • Убирает дублирование управляющего кода. Объединение множества условных операторов, ведущих к одной цели, помогает показать, что на самом деле вы делаете только одну сложную проверку, ведущую к одному общему действию.

  • Объединив все операторы в одном, вы позволяете выделить это сложное условие в новый метод с названием, отражающим суть этого выражения.

##Как делать рефакторинг

Перед тем как осуществлять рефакторинг, убедитесь, что в условиях операторов нет «побочных эффектов», или, другими словами, они не модифицируют что-то, а только возвращают значения. Побочные эффекты могут быть и в коде, который выполняется внутри самого оператора. Например, по результатам условия, что-то добавляется к переменной.

  1. Объедините множество условий в одном с помощью логических операторов and и or. Объединение операторов обычно следует такому правилу:

    • Вложенные условия соединяются с помощью оператора and.

    • Условия, следующие друг за другом, соединяются с помощью оператора or.

  2. Извлеките метод из условия оператора и назовите его так, чтобы он отражал суть проверяемого выражения.