#рефакторинг #методы_рефакторинга ![[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]]