Також відомий як 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 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...