Весняний РОЗПРОДАЖ

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

Також відомий як: 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 (isNotEligibleForDisability()) {
    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 (IsNotEligibleForDisability())
  {
    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->isNotEligibleForDisability()) {
    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 isNotEligibleForDisability():
        return 0
    # Compute the disability amount.
    # ...
До
disabilityAmount(): number {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // Compute the disability amount.
  // ...
}
Після
disabilityAmount(): number {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // Compute the disability amount.
  // ...
}

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

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

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

Переваги

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

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

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

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

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

    • Вкладені умови з’єднуються за допомогою оператора і.

    • Умови, які йдуть одна за одною, з’єднуються за допомогою оператора або.

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