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

Рефакторинг Розподіл умовного оператора

Проблема

У вас є складний умовний оператор (`if - then`/`else` або `switch`).

Рішення

Виділіть в окремі методи усі складні частини оператора: умова, `then` і `else`.

До
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}
Після
if (notSummer(date)) {
  charge = winterCharge(quantity);
}
else {
  charge = summerCharge(quantity);
}
До
if (date < SUMMER_START || date > SUMMER_END) 
{
  charge = quantity * winterRate + winterServiceCharge;
}
else 
{
  charge = quantity * summerRate;
}
Після
if (NotSummer(date)) 
{
  charge = WinterCharge(quantity);
}
else 
{
  charge = SummerCharge(quantity);
}
До
if ($date->before(SUMMER_START) || $date->after(SUMMER_END)) {
  $charge = $quantity * $winterRate + $winterServiceCharge;
}
else {
  $charge = $quantity * $summerRate;
}
Після
if (notSummer($date)) {
  $charge = winterCharge($quantity);
}
else {
  $charge = summerCharge($quantity);
}
До
if date.before(SUMMER_START) or date.after(SUMMER_END):
    charge = quantity * winterRate + winterServiceCharge
else:
    charge = quantity * summerRate
Після
if notSummer(date):
    charge = winterCharge(quantity)
else:
    charge = summerCharge(quantity)

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

Чим довша частина коду, тим складніше зрозуміти, що вона робить. Все ускладнюється ще більше, коли код щедро приправлений умовними операторами:

  • доки ви зрозумієте, що робить код в this, ви можете забути, що за умова була в операторі;
  • доки ви розбираєтеся з else, ви забуваєте, що робив код в this.

Переваги

  • Відокремлюючи код умовного оператора в методи із зрозумілою назвою, ви спрощуєте життя тому, хто згодом цей код буде підтримувати (дуже часто тією людиною будете ви самі через деякий час).

  • До речі, цей рефакторинг застосовується і для коротких виразів в умовах оператора. Рядок isSallaryDay() набагато наочніше опише те, що вона робить, ніж код порівняння дат.

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

  1. Виділіть умову в окремий метод за допомогою відокремлення методу.

  2. Повторіть видокремлення для частин оператора then і else.

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

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

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

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