Також відомий як Replace Parameter with Method Call

Рефакторинг Заміна параметра викликом методу

Проблема

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

Рішення

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

До
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
Після
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);
До
int basePrice = quantity * itemPrice;
double seasonDiscount = this.GetSeasonalDiscount();
double fees = this.GetFees();
double finalPrice = DiscountedPrice(basePrice, seasonDiscount, fees);
Після
int basePrice = quantity * itemPrice;
double finalPrice = DiscountedPrice(basePrice);
До
$basePrice = $this->quantity * $this->itemPrice;
$seasonDiscount = $this->getSeasonalDiscount();
$fees = $this->getFees();
$finalPrice = $this->discountedPrice($basePrice, $seasonDiscount, $fees);
Після
$basePrice = $this->quantity * $this->itemPrice;
$finalPrice = $this->discountedPrice($basePrice);
До
basePrice = quantity * itemPrice
seasonalDiscount = this.getSeasonalDiscount()
fees = this.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)
Після
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)

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

У довгому списку параметрів зазвичай вкрай складно орієнтуватися. Крім того, виклики таких методів часто перетворюються на цілу низку обчислень значень, які передаватимуться в метод. Ось чому якщо значення параметра може бути вичислено за допомогою виклику якогось методу, це слід зробити усередині самого методу, а від параметра позбавитися.

Переваги

  • Позбавляємося від зайвих параметрів, спрощуючи виклики методів. Ці параметри частенько створюються як заділ на майбутнє (яке може так і не настати).

Недоліки

  • Параметр може знадобитися завтра для якихось інших цілей і метод доведеться переписати.

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

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

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

  3. У коді головного методу замініть усі звернення до замінюваного параметра викликами методу отримання значення.

  4. Використайте видалення параметра, щоб видалити невживаний тепер параметр.

Замучились читати?

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

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

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