Також відомий як Consolidate Conditional Expression

Рефакторинг Об'єднання умовних операторів

Проблема

У вас є декілька умовних операторів, що ведуть до однакового результату або дії.

Рішення

Об'єднайте всі умови в одному умовному операторі.

До
double disabilityAmount() {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // compute the disability amount
  //...
}
Після
double disabilityAmount() {
  if (isNotEligableForDisability()) {
    return 0;
  }
  // compute the disability amount
  //...
}
До
double DisabilityAmount() 
{
  if (seniority < 2) 
  {
    return 0;
  }
  if (monthsDisabled > 12) 
  {
    return 0;
  }
  if (isPartTime) 
  {
    return 0;
  }
  // compute the disability amount
  //...
}
Після
double DisabilityAmount() 
{
  if (IsNotEligableForDisability()) 
  {
    return 0;
  }
  // compute the disability amount
  //...
}
До
function disabilityAmount() {
  if ($this->seniority < 2) return 0;
  if ($this->monthsDisabled > 12) return 0;
  if ($this->isPartTime) return 0;
  // compute the disability amount
  ...
Після
function disabilityAmount() {
  if ($this->isNotEligableForDisability()) return 0;
  // compute the disability amount
  ...
До
def disabilityAmount():
    if seniority < 2:
        return 0
    if monthsDisabled > 12:
        return 0
    if isPartTime:
        return 0
    # compute the disability amount
    #...
Після
def disabilityAmount():
    if isNotEligableForDisability():
        return 0
    # compute the disability amount
    #...

Причини рефакторингу

Код містить безліч операторів, що чергуються і виконують однакові дії. Причина розділення операторів неочевидна.

Головна мета об'єднання операторів — відокремити умову оператора в окремий метод, спростивши його розуміння.

Переваги

  • Прибирає дублювання управляючого коду. Об'єднання безлічі умовних операторів, що ведуть до однієї мети, допомагає показати, що насправді ви робите тільки одну складну перевірку, що веде до однієї спільної дії.
  • Об'єднавши усі оператори в одному, ви зможете виділити цю складну умову в новий метод з назвою, що відображає суть цього виразу.

Порядок рефакторингу

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

  1. Об'єднайте декілька умов в одному за допомогою операторів і та або. Об'єднання операторів зазвичай робиться за таким правилом:

    • Вкладені умови з'єднуються за допомогою оператора і.
    • Умови, які йдуть одна за одною, з'єднуються за допомогою оператора або.
  2. Відокремте метод від умови оператора і назвіть його так, щоб він відображав суть виразу, який перевірявся.

Замучились читати?

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

Або спробуйте наш новий інтерактивний курсу. Він набагато цікавіший за банальний тест.

Дізнатися більше...