Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!

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

Також відомий як: 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. Видаліть метод.