Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Удаление аргумента-флага (Remove Flag Argument).md
2026-02-23 19:52:05 +03:00

54 lines
2.8 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 20250212084022.png]]
### **Проблема**
Метод разбит на части, каждая из которых выполняется в зависимости от значения какого-то параметра.
```typescript
setValue(name: string, value: number): void {
if (name.equals("height")) {
height = value;
return;
}
if (name.equals("width")) {
width = value;
return;
}
}
```
### **Решение**
Извлеките отдельные части метода в собственные методы и вызывайте их вместо оригинального метода.
```typescript
setHeight(arg: number): void {
height = arg;
}
setWidth(arg: number): number {
width = arg;
}
```
### **Причины рефакторинга**
Метод, содержащий варианты выполнения, разросся до грандиозных размеров. В каждой из таких цепочек выполняется нетривиальный код. При этом новые варианты добавляются очень редко.
### **Достоинства**
- Улучшает читабельность кода. Куда очевидней, что делает метод `startEngine()` чем `setValue("engineEnabled", true)`.
### **Когда нельзя применить**
- Не стоит применять замену параметра явными методами, если метод редко меняется, а новые вариации внутри него не добавляются.
### **Порядок рефакторинга**
1. Для каждого варианта исполнения метода создайте свой метод. Запускайте эти методы в зависимости от значения параметра в основном методе.
2. Найдите все места, где вызывается оригинальный метод. Подставьте туда вызов одного из новых методов в зависимости от передающегося параметра.
3. Когда не останется ни одного вызова оригинального метода, его можно будет удалить
### **Борется с запахом**
- [[Повторяющиеся switch]]
- [[Длинная функция]]
### **Обратный рефакторинг**
- [[Параметризация функции (Parameterize Function)]]
### **Ссылки**
- https://refactoring.guru/ru/replace-parameter-with-explicit-methods
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]