#рефакторинг #методы_рефакторинга ![[Pasted image 20250212085614.png]] ### **Проблема** Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода. ```typescript let basePrice = quantity * itemPrice; const seasonDiscount = this.getSeasonalDiscount(); const fees = this.getFees(); const finalPrice = discountedPrice(basePrice, seasonDiscount, fees); ``` ### **Решение** Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода. ```typescript let basePrice = quantity * itemPrice; let finalPrice = discountedPrice(basePrice); ``` ### **Причины рефакторинга** В длинном списке параметров зачастую крайне сложно ориентироваться. Кроме того, вызовы таких методов часто превращаются в целую вереницу вычислений значений, которые будут передаваться в метод. Вот почему если значения параметра может быть вычислено при помощи вызова какого-то метода, это следует сделать внутри самого метода, а от параметра избавиться. ### **Достоинства** - Избавляемся от лишних параметров, упрощая вызовы методов. Эти параметры зачастую создаются как задел на будущее (которое может так и не наступить). ### **Недостатки** - Параметр может понадобиться завтра для каких-то других целей и метод придётся переписать. ### **Порядок рефакторинга** 1. Убедитесь, что код получения значения не использует параметров из текущего метода. Это важно, так как параметры текущего метода будут недоступны внутри другого метода, из-за чего перенос станет невозможен. 2. Если код получения значения сложнее, чем один вызов какого-то метода или функции, примените [[Извлечение функции (Extract Function)]], чтобы выделить этот код в новый метод и сделать вызов простым. 3. В коде главного метода замените все обращения к заменяемому параметру вызовами метода получения значения. 4. Используйте удаление параметра, чтобы удалить неиспользуемый теперь параметр ### **Ссылки** - https://refactoring.guru/ru/replace-parameter-with-method-call - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]