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

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

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