Также известен как Inline Temp

Рефакторинг Встраивание переменной

Проблема

У вас есть временная переменная, которой присваивается результат простого выражения (и больше ничего).

Решение

Замените обращения к переменной этим выражением.
До
double hasDiscount(Order order) {
  double basePrice = order.basePrice();
  return (basePrice > 1000);
}
После
double hasDiscount(Order order) {
  return (order.basePrice() > 1000);
}
До
double HasDiscount(Order order) 
{
  double basePrice = order.BasePrice();
  return (basePrice > 1000);
}
После
double HasDiscount(Order order) 
{
  return (order.BasePrice() > 1000);
}
До
$basePrice = $anOrder->basePrice();
return ($basePrice > 1000);
После
return ($anOrder->basePrice() > 1000);
До
def hasDiscount(order):
    basePrice = order.basePrice()
    return basePrice > 1000
После
def hasDiscount(order):
    return order.basePrice() > 1000

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

Встраивание локальной переменной почти всегда используется как часть «замены переменной вызовом метода» (Replace temp with Query) или для облегчения извлечения метода.

Достоинства

  • Сам по себе данный рефакторинг не несёт почти никакой пользы. Тем не менее, если переменной присваивается результат выполнения какого-то метода, у вас есть возможность немного улучшить читабельность программы, избавившись от лишней переменной.

Недостатки

  • Иногда с виду бесполезные временные переменные служат для кеширования, то есть сохранения результата какой-то дорогостоящей операции, который будет в ходе работы использован несколько раз повторно. Перед тем, как осуществлять рефакторинг, убедитесь, что в вашем случае это не так.

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

  1. Найдите все места, где используется переменная, и замените их выражением, которое ей присваивалось.

  2. Удалите объявление переменной и строку присваивания ей значения.

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

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

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

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