2.7 KiB
2.7 KiB
#рефакторинг #методы_рефакторинга
Проблема
Использование циклов для обхода коллекции объектов
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), в котором используется функция для выбора подмножества входной коллекции для последующих действий в конвейере. Мне гораздо проще следовать логике, если она выражена в виде конвейера — в таком случае я могу читать ее сверху вниз, чтобы увидеть, как объекты проходят через конвейер
Недостатки
- Если при проведении этого рефакторинга вы перестараетесь, придётся прибегнуть к Встраивание класса (Inline Class).
Порядок рефакторинга
- Создайте новую переменную для коллекции цикла.
- В нисходящем направлении возьмите каждый фрагмент поведения в цикле и замените его операцией конвейера коллекции в выводе переменной сбора цикла. Выполните тестирование после каждого изменения.
- Как только все поведение будет убрано из цикла, удалите его
