Как стать автором
Обновить

Комментарии 16

console.log(normalizeNames(names)); // ['alice', 'bob']

А как тут bob то появился ?

console.log(normalizeNames(names)); // ['alice', 'bob']

А как тут bob то появился ?

Мало того, что результат normalizeNames некорректный, но и сама функция ужасна.

Она не пройдёт ни одно ревью в более или менее нормальной компании. Какая сложность этого алгоритма? Считаю этот пример вообще очень плохой.

Согласен. Циклы for отменили? Начинает так казаться. Зачем постоянно чэйнить несколько map/filter, когда можно сделать всё за один проход? Плохие примеры какие-то

Я сейчас отхвачу минусов из обоих лагерей, но, по-моему, ванильный экма и лодаш лучше всего, и for'ов, и этой Рямды.

С циклами понятно. То же самое, что предложить циклы вместо SQL'я. Я хочу видеть декларативную схему преобразования, а не набор инструкций для ЦП. На больших наборах данных это, возможно, начнёт тормозить, но а зачем вы тащите большие наборы данных в экму? Я на ней пишу вещи типа UI, и если по коллекции из 30 элементов придётся пробежать три раза, а не один, то сильно не расстроюсь. А вот если будет нечитаемая куча for'ов, это меня расстроит.

А зачем эта Рямда, я просто не понимаю. Функции делали гражданами первого класса, чтобы их не замечать, чтобы декларативность стала возможной, а не для того, чтобы функция функцией погоняла из функции. Какая-то максимально нечитаемая запись.

Да на самом деле можно было обойтись одним reduce

Сложность - O(n).

Есть идеи, как сделать лучше?

import * as R from 'ramda';

const add = R.add(10); // Создаём функцию, которая прибавляет 10
console.log(add(5)); // 15

Круто, тащим всю библиотеку ради одной функции.

В целом статья из разряда "как сложить числа с помощью jquery", когда джуны тянут в код что то не потому что надо, а потому что могут.

Давно уже пора отказаться от подобных библиотек, стандартное апи очень даже неплохое, и только в редких случаях, например когда нужен map объекта или глубокое сравнение, можно что то подтянуть (и то имеет смысл просто копирнуть пару таких функций в свой проект).

Не сказал бы что API прям хорошее, большого числа мелочей не хватает, по крайней мере мне и, получается, моим коллегам. В начале проекта 5-10 простых функций (noop, arity, partial, identity или id, и т.д.), скоро уже 20. Потом появляется compose или flow, На всё это нужны тесты. Следишь за непротиворечивостью композиций этого всего.

А можно сразу библиотеку затянуть и использовать Tree Shaking. За ramda не скажу, но с lodash так делал.

Круто, тащим всю библиотеку ради одной функции.

Если вы про скомпилированный код, то вы не правы. Запись как в примере кода задействует tree shaking, то есть в скомпилированный код пойдёт только функция add.

Если вы про подключение библиотеки к исходному коду ради одной функции, то вы утрируете. Этот пример — простейшая иллюстрация принципа, заложенного в основу библиотеки. Никто не призывает подключать целую библиотеку ради сложения чисел.

Во второй задаче код значительно потерял в компактности и читаемости, а это как бы суть библиотеки...

Как по мне то ванильный жс выглядит более читабельным

У рамды кривые типы. Если уж и тащить, то remeda, которая изначально на тс-е

Читаемость хуже, теперь надо больше усилий чтобы прочитать и понять, что там происходит.

Кода меньше не стало

Лучше использовать ramBda. Причины:

  • TS типы включены в пакет, не нужно подгружать отдельные @types/ramda

  • Лучше производительность у большинства операторов (в том числе и по сравнению с lodash)

  • Исходники проще прочитать (субъективно, но лично для меня так)

  • Меньше весит: ±18KB у ramda против ±5KB у ramBda (это minified + gzipped, проверил на bundlephobia)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий