Объединение дублирующихся фрагментов в условных операторах
Проблема
Одинаковый фрагмент кода находится во всех ветках условного оператора.
Решение
Вынесите его за рамки оператора.
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();
Причины рефакторинга
Дублирующий код находится внутри всех веток условного оператора. Зачастую это является результатом эволюции кода внутри веток оператора, тем более, если над кодом работало несколько человек.
Достоинства
- Убивает дублирование кода.
Порядок рефакторинга
-
Если дублирующие участки находятся вначале веток оператора, вынесите их перед условным оператором.
-
Если такой код выполняется в конце веток, поместите его после условного оператора.
-
Если дублирующий код расположен случайным образом внутри веток, вам нужно для начала попытаться передвинуть его в начало или в конец ветки, в зависимости от того, меняет ли он результат последующего кода.
-
Дублирующий фрагмент кода более одной строки можно попытаться извлечь в новый метод, если в этом есть смысл.