All streams
Search
Write a publication
Pull to refresh
6
0

User

Send message
Вы не обижайтесь, но начните обосновывать свои утверждения – а то церковь свидетелей Трансдюсера выходит
>паттерн намного проще, чем ленивые вычисления (в lodash)
вас же не просят их имплементировать

>Да и и сама ramda намного проще и немагичнее, чем lodash
ни чем не обоснованое утверждение

>трансдьюсеры работают где угодно
это круто, но зачем? единственное здравое объяснение, которое приходит в голову – тестирование. Но это не проблема

>убрав оттуда filter/map/прочее и оставив только reduce.
я либо что-то не понимаю – либо вы что-то не договариваете.
возьмем простой кусок
const H = require('highland')

H(process.stdin)
  .map(x => 'something' + b)
  .pipe(process.stdout)


из вашего утверждения выходит что я .map(и любые другие преобразования) могу выразить через .reduce, но ведь .reduce возраващает нам результа когда «пройдет» по всей коллекции – а тут конца коллекции как бы нет.

Я не поленился и проверил:

const H = require('highland')

const xf = require('transducers-js').map(H.add('b'));

H(process.stdin)
  .transduce(xf)
  .pipe(process.stdout)


И что интересно – он работает абсолютно аналогично первому варианту. Я что-то не понимаю про reduce или вы плохо объяснили?

И самое главное: вы так и не объяснили – зачем все это? вы говорите: простой паттерн, который позволяет добится большой эффективности. Обоснуйте это утверждение,

пока что как в вашем примере так и в моем – мы эффективно увеличили количество строк кода и количество зависимостей
Сравните решение 1 и решение 2 – решение 2 и есть «функциональщина» и оно намного более читаемо. При условии, что вы знаете набор очень простых примитивов(.map, .filter, .reduce и производные)

Касательно всех остальных решений – вполне согласем с вашим мнением
Если использовать lodash (а его очень много людей использует), то лишнего прохода не будет благодаря Lazy Evaluation
  _(scores)
    .filter(({ my, others }) => my > others) // выбираем выигрышные
    .map(({ gameID }) => gameID)             // получаем их номер
    .take(2)
    .value()


Но главное, ваш пример выглядит так будто вы очень простой(чем проще – тем надежнее) и короткий код (пусть даже не оптимальный, хотя lodash это исправляет) который работает, заменили на какой-то «матан», который в придачу еще и длинее. Зачем?
Я ее сегодня постараюсь перевеcти и вернусь к вам. Интерес вроде бы есть к данной тематике
Тут был комментарий про то, что лучше сделать через генераторы – я его случайно удалил и не знаю как востановить, извиняюсь за это. Мой ответ – возможно. Но что что делать с буферизацией?
нет, не перевод

Information

Rating
Does not participate
Registered
Activity