В программировании есть два подхода. Первый — не использовать утилитарные функции и каждый раз заново писать код, решающий типичную задачу вроде группировки элементов массива. Второй — максимально использовать уже написанные утилитарные функции и выносить повторяющийся код в новые. К большому сожалению, в джаваскрипте довольно скудная стандартная библиотека, что бы ни говорили сторонники первого подхода («зачем тебе лодаш, если forEach
, map
и filter
уже давным-давно реализованы нативно?»). Из-за этого приходится подключать сторонние библиотеки или писать свои велосипеды, что, конечно, плохо.
Тем не менее, мне ближе второй подход, потому что:
- утилитарные функции позволяют максимально сконцентрироваться на задаче и не отвлекаться на мелочи вроде написания очередного редьюса;
- утилитарные функции лучше выражают намерения программиста:
flatten
,pluck
илиchunk
выглядят куда содержательнее, чемarray.reduce((result, item) => /* ... */)
; - каждое дублирование кода вместо использования утилитарной функции повышает вероятность ошибки и требует дополнительных тестов.