3.4 KiB
3.4 KiB
#рефакторинг #методы_рефакторинга
Проблема
Вы помещаете результат какого-то выражения в локальную переменную, чтобы использовать её далее в коде.
calculateTotal(): number {
let basePrice = quantity * itemPrice;
if (basePrice > 1000) {
return basePrice * 0.95;
}
else {
return basePrice * 0.98;
}
}
Решение
Выделите все выражение в отдельный метод и возвращайте результат из него. Замените использование вашей переменной вызовом метода. Новый метод может быть использован и в других методах.
calculateTotal(): number {
if (basePrice() > 1000) {
return basePrice() * 0.95;
}
else {
return basePrice() * 0.98;
}
}
basePrice(): number {
return quantity * itemPrice;
}
Причины рефакторинга
Применение данного рефакторинга может быть подготовительным этапом для применения Извлечение функции (Extract Function) для какой-то части очень длинного метода.
Кроме того, иногда можно найти это же выражение и в других методах, что заставляет задуматься о создании общего метода для его получения.
Достоинства
- Улучшает читабельность кода. Намного проще понять, что делает метод
getTax()чем строкаorderPrice() * -2. - Помогает убрать дублирование кода, если заменяемая строка используется более чем в одном методе.
Порядок рефакторинга
- Убедитесь, что переменной в пределах метода присваивается значение только один раз. Если это не так, используйте расщепление переменной для того, чтобы гарантировать, что переменная будет использована только для хранения результата вашего выражения.
- Используйте Извлечение функции (Extract Function) для того, чтобы переместить интересующее вас выражение в новый метод. Убедитесь, что этот метод только возвращает значение и не меняет состояние объекта. Если он как-то влияет на видимое состояние объекта, используйте разделение запроса и модификатора.
- Замените использование переменной вызовом вашего нового метода
