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

Об'єднання фрагментів, що дублюються, в умовних операторах

Також відомий як: Consolidate Duplicate Conditional Fragments

Проблема

Однаковий фрагмент коду знаходиться в усіх гілках умовного оператора.

Рішення

Винесіть його за рамки оператора.

До
if (isSpecialDeal()) {
  total = price * 0.95;
  send();
}
else {
  total = price * 0.98;
  send();
}
Після
if (isSpecialDeal()) {
  total = price * 0.95;
}
else {
  total = price * 0.98;
}
send();
До
if (IsSpecialDeal()) 
{
  total = price * 0.95;
  Send();
}
else 
{
  total = price * 0.98;
  Send();
}
Після
if (IsSpecialDeal())
{
  total = price * 0.95;
}
else
{
  total = price * 0.98;
}
Send();
До
if (isSpecialDeal()) {
  $total = $price * 0.95;
  send();
} else {
  $total = $price * 0.98;
  send();
}
Після
if (isSpecialDeal()) {
  $total = $price * 0.95;
} else {
  $total = $price * 0.98;
}
send();
До
if isSpecialDeal():
    total = price * 0.95
    send()
else:
    total = price * 0.98
    send()
Після
if isSpecialDeal():
    total = price * 0.95
else:
    total = price * 0.98
send()
До
if (isSpecialDeal()) {
  total = price * 0.95;
  send();
}
else {
  total = price * 0.98;
  send();
}
Після
if (isSpecialDeal()) {
  total = price * 0.95;
}
else {
  total = price * 0.98;
}
send();

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

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

Переваги

  • Вбиває дублювання коду.

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

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

  2. Якщо такий код виконується в кінці гілок, помістить його після умовного оператора.

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

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