Заміна параметра викликом методу
Проблема
Викликаємо метод і передаємо його результати в параметри іншого методу. При цьому значення параметрів могли б бути отримані і всередині викликаного методу.
Рішення
Замість передачі значення через аргументи, спробуйте перемістити код отримання значення всередину самого методу.
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 = self.getSeasonalDiscount()
fees = self.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
Причини рефакторингу
У довгому списку параметрів зазвичай вкрай складно орієнтуватися. Крім того, виклики таких методів часто перетворюються на цілу низку обчислень значень, які передаватимуться в метод. Ось чому якщо значення параметра може бути вираховано за допомогою виклику якогось методу, це слід зробити усередині самого методу, а від параметра позбутися.
Переваги
- Позбавляємося від зайвих параметрів, спрощуючи виклики методів. Ці параметри частенько створюються як заділ на майбутнє (яке може так і не настати).
Недоліки
- Параметр може знадобитися завтра для якихось інших цілей і метод доведеться переписати.
Порядок рефакторингу
-
Переконайтеся, що код отримання значення не використовує параметрів з поточного методу. Це важливо, оскільки параметри будуть недоступні усередині іншого методу, через що перенесення стане неможливим.
-
Якщо код отримання значення складніший, ніж один виклик якогось методу або функції, застосуйте відокремлення методу, щоб виділити цей код в новий метод і зробити виклик простішим.
-
У коді головного методу замініть усі звернення до замінюваного параметра викликами методу отримання значення.
-
Використайте видалення параметра, щоб видалити невживаний тепер параметр.