Autumn SALE

Вбудовування змінної

Також відомий як: Inline Temp

Проблема

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

Рішення

Замініть звернення до змінної цим виразом.

До
boolean hasDiscount(Order order) {
  double basePrice = order.basePrice();
  return basePrice > 1000;
}
Після
boolean hasDiscount(Order order) {
  return order.basePrice() > 1000;
}
До
bool HasDiscount(Order order)
{
  double basePrice = order.BasePrice();
  return basePrice > 1000;
}
Після
bool 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
До
hasDiscount(order: Order): boolean {
  let basePrice: number = order.basePrice();
  return basePrice > 1000;
}
Після
hasDiscount(order: Order): boolean {
  return order.basePrice() > 1000;
}

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

Вбудовування локальної змінної майже завжди використовують як частину заміни змінної викликом методу або для полегшення відокремлення методу.

Переваги

  • Сам по собі цей рефакторинг не несе майже ніякої користі. Проте, якщо змінній присвоюється результат виконання якогось методу, у вас є можливість трохи поліпшити читабельність програми, позбавившись від зайвої змінної.

Недоліки

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

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

  1. Знайдіть усі місця, де використовується змінна, і замініть цю змінну виразом, який їй присвоювався.

  2. Видаліть оголошення змінної і рядок присвоєння їй значення.