Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!

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

Також відомий як: 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. Відокремте метод від умови оператора і назвіть його так, щоб він відображав суть виразу, який перевірявся.