Об'єднання фрагментів, що дублюються, в умовних операторах
Проблема
Однаковий фрагмент коду знаходиться в усіх гілках умовного оператора.
Рішення
Винесіть його за рамки оператора.
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();
Причини рефакторингу
Дублюючий код знаходиться усередині усіх гілок умовного оператора. Найчастіше це є результатом еволюції коду усередині гілок оператора, особливо, якщо над кодом працювало декілька чоловік.
Переваги
- Вбиває дублювання коду.
Порядок рефакторингу
-
Якщо дублюючі ділянки знаходяться на початку гілок оператора, винесіть їх перед умовним оператором.
-
Якщо такий код виконується в кінці гілок, помістить його після умовного оператора.
-
Якщо дублюючий код розташован випадковим чином усередині гілок, вам треба спробувати пересунути його в початок або в кінець гілки, залежно від того, чи міняє він результат подальшого коду.
-
Дублюючий фрагмент коду більший за один рядок можна спробувати відокремити в новий метод, якщо в цьому є сенс.