Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Подстановка алгоритма (Substitute Algorithm).md
2026-02-23 19:52:05 +03:00

51 lines
3.5 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 20250128084409.png]]
### **Проблема**
Вы хотите заменить существующий алгоритм другим
```javascript
function foundPerson(people) {
for(let i = 0; i < people.length; i++) {
if (people[i] === Don) {
return Don;
}
if (people[i] === John) {
return John;
}
if (people[i] === Kent) {
return Kent;
}
}
return “”;
}
```
### **Решение**
Замените тело метода, реализующего старый алгоритм, новым алгоритмом
```javascript
function foundPerson(people) {
const candidates = [Don, John, Kent];
return people.find(p => candidates.includes(p)) || '';
}
```
### **Причины рефакторинга**
1. Поэтапный рефакторинг — не единственный способ улучшить программу. Иногда вы сталкиваетесь с таким нагромождением проблем в методе, что его гораздо проще переписать заново. С другой стороны, вы могли найти алгоритм, который куда проще и эффективнее текущего. В этом случае надо просто заменить старый алгоритм новым.
2. С течением времени ваш алгоритм может оказаться включен в набор известной библиотеки или фреймворка, и вы можете пожелать избавиться от собственной реализации, чтобы облегчить себе поддержку программы.
3. Требования к работе программы могут измениться настолько сильно, что старый алгоритм невозможно просто «допилить» до соответствия им.
### **Порядок рефакторинга**
1. Убедитесь, что вы по максимуму упростили текущий алгоритм. Перенесите несущественный код в другие методы с помощью извлечения метода. Чем меньше «движущихся частей» останется в исходном алгоритме, тем проще будет его заменить.
2. Создайте ваш новый алгоритм в новом методе. Замените старый алгоритм новым и запустите тесты программы.
3. Если результаты не сходятся, верните старую реализацию и сравните результаты. Выясните, почему результаты не совпадают. Нередко, причиной могут быть ошибки в старом алгоритме, но с большей вероятностью не работает что-то в новом.
4. Когда все тесты начнут проходить, окончательно удалите старый алгоритм.
### **Борется с запахом**
- [[Дублируемый код]]
- [[Длинная функция]]
### **Ссылки**
- https://refactoring.guru/ru/substitute-algorithm
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]