Весенняя РАСПРОДАЖА

Объединение дублирующихся фрагментов в условных операторах

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