Також відомий як 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. Об'єднайте декілька умов в одному за допомогою операторів і та або. Об'єднання операторів зазвичай робиться за таким правилом:
  • Вкладені умови з'єднуються за допомогою оператора і.
  • Умови, які йдуть одна за одною, з'єднуються за допомогою оператора або.
  1. «Відокремте метод» (Extract method) від умови оператора і назвіть його так, щоб він відображав суть виразу, який перевірявся.

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

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

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

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

Живий приклад

Перший раз у нас? Нічого страшного!

У нас тут все просто – цей інтерактивний приклад дуже схожий на відео (хоча й виглядає набагато крутіше).

  1. Натискаєте велику кнопку "Почати", а далі слідуєте усім підказкам.
  2. Ви можете перемотувати програвання, використовуючи стрілки зліва.
  3. Окрім того, ви можете подивитися різницю між стартовим та отриманим кодом, натиснувши кнопку ока ().
  4. Кнопка компіляції та тестування () дає змогу перевірити код на наявність помилок.