Autumn SALE

Вбудовування методу

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

Проблема

Варто використовувати у випадках, коли тіло методу очевидніше за сам метод.

Рішення

Замініть виклики методу його вмістом і видаліть сам метод.

До
class PizzaDelivery {
  // ...
  int getRating() {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  boolean moreThanFiveLateDeliveries() {
    return numberOfLateDeliveries > 5;
  }
}
Після
class PizzaDelivery {
  // ...
  int getRating() {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}
До
class PizzaDelivery 
{
  // ...
  int GetRating() 
  {
    return MoreThanFiveLateDeliveries() ? 2 : 1;
  }
  bool MoreThanFiveLateDeliveries() 
  {
    return numberOfLateDeliveries > 5;
  }
}
Після
class PizzaDelivery 
{
  // ...
  int GetRating() 
  {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}
До
function getRating() {
  return ($this->moreThanFiveLateDeliveries()) ? 2 : 1;
}
function moreThanFiveLateDeliveries() {
  return $this->numberOfLateDeliveries > 5;
}
Після
function getRating() {
  return ($this->numberOfLateDeliveries > 5) ? 2 : 1;
}
До
class PizzaDelivery:
    # ...
    def getRating(self):
        return 2 if self.moreThanFiveLateDeliveries() else 1
  
    def moreThanFiveLateDeliveries(self):
        return self.numberOfLateDeliveries > 5
Після
class PizzaDelivery:
  # ...
  def getRating(self):
    return 2 if self.numberOfLateDeliveries > 5 else 1
До
class PizzaDelivery {
  // ...
  getRating(): number {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  moreThanFiveLateDeliveries(): boolean {
    return numberOfLateDeliveries > 5;
  }
}
Після
class PizzaDelivery {
  // ...
  getRating(): number {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}

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

Основна причина — тіло методу складається з простого делегування до іншого методу. Саме по собі таке делегування — не проблема. Але якщо таких методів досить багато, стає дуже легко в них заплутатися.

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

Переваги

  • Мінімізуючи кількість таких «лінивих» методів, ми зменшуємо загальну складність коду.

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

  1. Переконайтесь, що метод не перевизначається в підкласах. Якщо він перевизначається, утримайтесь від рефакторингу.

  2. Знайдіть всі виклики методу. Замініть ці виклики вмістом методу.

  3. Видаліть метод.