Friend spotlight!
Whimsical Animations course
Friend spotlight!
NEW Whimsical Animations course
Friend spotlight! NEW Whimsical Animations course
huge discount only this week
Friend spotlight! Want to make your project stand out? NEW Whimsical Animations course huge discount only this week

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

Також відомий як: 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. Дублюючий фрагмент коду більший за один рядок можна спробувати відокремити в новий метод, якщо в цьому є сенс.