#рефакторинг #методы_рефакторинга ![[Pasted image 20250131092749.png]] ### **Проблема** Использование циклов для обхода коллекции объектов ```javascript const names = []; for (const i of input) { if (i.job === “programmer”) { names.push(i.name); } } ``` ### **Решение** Языковые среды обеспечивают для этого лучшую конструкцию — конвейер коллекции ```javascript const names = input .filter(i => i.job === “programmer”) .map(i => i.name) ``` ### **Причины рефакторинга** Конвейеры коллекций позволяют мне описать обработку как последовательность операций, каждая из которых потребляет и генерирует коллекцию. Наиболее распространенными из этих операций являются отображение (*map*), использующее функции для преобразования каждого элемента входной коллекции, и фильтр (*filter*), в котором используется функция для выбора подмножества входной коллекции для последующих действий в конвейере. Мне гораздо проще следовать логике, если она выражена в виде конвейера — в таком случае я могу читать ее сверху вниз, чтобы увидеть, как объекты проходят через конвейер ### **Недостатки** - Если при проведении этого рефакторинга вы перестараетесь, придётся прибегнуть к [[Встраивание класса (Inline Class)|встраиванию класса]]. ### **Порядок рефакторинга** 1. Создайте новую переменную для коллекции цикла. 2. В нисходящем направлении возьмите каждый фрагмент поведения в цикле и замените его операцией конвейера коллекции в выводе переменной сбора цикла. Выполните тестирование после каждого изменения. 3. Как только все поведение будет убрано из цикла, удалите его ### **Ссылки** - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]