Также известен как 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()

Причины рефакторинга

Дублирующий код находится внутри всех веток условного оператора. Зачастую это является результатом эволюции кода внутри веток оператора, тем более, если над кодом работало несколько человек.

Достоинства

  • Убивает дублирование кода.

Порядок рефакторинга

  1. Если дублирующие участки находятся вначале веток оператора, вынесите их перед условным оператором.

  2. Если такой код выполняется в конце веток, поместите его после условного оператора.

  3. Если дублирующий код расположен случайным образом внутри веток, вам нужно для начала попытаться передвинуть его в начало или в конец ветки, в зависимости от того, меняет ли он результат последующего кода.

  4. Дублирующий фрагмент кода более одной строки можно попытаться «извлечь в новый метод» (Extract method), если в этом есть смысл.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...

Живой пример

Первый раз здесь? Ничего страшного!

У нас здесь всё просто – интерактивный пример очень похож на видео (но выглядит гораздо круче).

  1. После начала проигрывания, вам показываются разнообразные подсказки и сообщения. Вы продвигаетесь дальше, кликая на них.
  2. Вы можете перематывать шаги, используя стрелки слева.
  3. Кроме того, вы можете посмотреть разницу между первоначальным и получившимся кодом, нажав кнопку с глазом ().
  4. Кнопка компиляции () позвоялет проверить текущий код на наличие ошибок.