Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Замена временной переменной запросом (Replace Temp with Query).md
2026-02-23 19:52:05 +03:00

55 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #методы_рефакторинга
![[Pasted image 20250127093832.png]]
### **Проблема**
Вы помещаете результат какого-то выражения в локальную переменную, чтобы использовать её далее в коде.
```typescript
calculateTotal(): number {
let basePrice = quantity * itemPrice;
if (basePrice > 1000) {
return basePrice * 0.95;
}
else {
return basePrice * 0.98;
}
}
```
### **Решение**
Выделите все выражение в отдельный метод и возвращайте результат из него. Замените использование вашей переменной вызовом метода. Новый метод может быть использован и в других методах.
```typescript
calculateTotal(): number {
if (basePrice() > 1000) {
return basePrice() * 0.95;
}
else {
return basePrice() * 0.98;
}
}
basePrice(): number {
return quantity * itemPrice;
}
```
### **Причины рефакторинга**
Применение данного рефакторинга может быть подготовительным этапом для применения [[Извлечение функции (Extract Function)]] для какой-то части очень длинного метода.
Кроме того, иногда можно найти это же выражение и в других методах, что заставляет задуматься о создании общего метода для его получения.
### **Достоинства**
- Улучшает читабельность кода. Намного проще понять, что делает метод `getTax()` чем строка `orderPrice() * -2`.
- Помогает убрать дублирование кода, если заменяемая строка используется более чем в одном методе.
### **Порядок рефакторинга**
1. Убедитесь, что переменной в пределах метода присваивается значение только один раз. Если это не так, используйте расщепление переменной для того, чтобы гарантировать, что переменная будет использована только для хранения результата вашего выражения.
2. Используйте [[Извлечение функции (Extract Function)]] для того, чтобы переместить интересующее вас выражение в новый метод. Убедитесь, что этот метод только возвращает значение и не меняет состояние объекта. Если он как-то влияет на видимое состояние объекта, используйте разделение запроса и модификатора.
3. Замените использование переменной вызовом вашего нового метода
### **Борется с запахом**
- [[Длинная функция]]
- [[Дублируемый код]]
### **Ссылки**
- https://refactoring.guru/ru/replace-temp-with-query
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]