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

2.7 KiB
Raw Permalink Blame History

#рефакторинг #методы_рефакторинга

!Pasted image 20250131092749.png

Проблема

Использование циклов для обхода коллекции объектов

const names = [];
for (const i of input) {
  if (i.job === programmer) {
    names.push(i.name);
  }
}

Решение

Языковые среды обеспечивают для этого лучшую конструкцию — конвейер коллекции

const names = input
  .filter(i => i.job === programmer)
  .map(i => i.name)

Причины рефакторинга

Конвейеры коллекций позволяют мне описать обработку как последовательность операций, каждая из которых потребляет и генерирует коллекцию. Наиболее распространенными из этих операций являются отображение (map), использующее функции для преобразования каждого элемента входной коллекции, и фильтр (filter), в котором используется функция для выбора подмножества входной коллекции для последующих действий в конвейере. Мне гораздо проще следовать логике, если она выражена в виде конвейера — в таком случае я могу читать ее сверху вниз, чтобы увидеть, как объекты проходят через конвейер

Недостатки

Порядок рефакторинга

  1. Создайте новую переменную для коллекции цикла.
  2. В нисходящем направлении возьмите каждый фрагмент поведения в цикле и замените его операцией конвейера коллекции в выводе переменной сбора цикла. Выполните тестирование после каждого изменения.
  3. Как только все поведение будет убрано из цикла, удалите его

Ссылки