Pull to refresh

Comments 7

код копипастите вместе с ошибками из оригинала:
const filterReducer (predicate) => (result, input) => {
  return predicate(input) ? result.concat(input) : result;
};

Пропущено "=" после filterReducer.

И игру слов потеряли (там, где «хаха»).
Спасибо, исправился :)
Про "(хаха!)", это издержки буквального перевода, где акцент стоит именно на слове, после которого идет "(хаха!)" :)
По-моему, превосходный способ затруднить чтение, понимание и отладку кода.
Если производительность критична — проще использовать обычный процедурный подход. В противном случае привычную функциональщину filter/map/etc.
dom1n1k
По-моему, превосходный способ затруднить чтение, понимание и отладку кода.

JSmitty JSmitty
Пропущено "=" после filterReducer.

Никакие пропуски, в данном случае, чего либо в этом коде никак не влияют ни на отладку ни на понимание этого когда.
Быстрее то стало? Тестировали?
Полагаю, прирост производительности будет примерно как у Lazy.js, в основе которого лежит та же идея. У них на сайте есть сравнения.

Безотносительно трансдьюсеров, мне очень сильно по глазам бьёт когда я вижу, что-то вроде:


const mapReducer = (mapper) => (result, input) => {
  return result.concat(mapper(input));
};

Нужно понимать, что .concat создаёт новый array. Каждый раз. Т.е. вообще всегда. И чем больше array.length, тем дольше эта операция длится. У нас не haskell. Такие операции ооочень дорогие. Наверняка это учтено в rambda и там используется мутабельный подход (не уверен, не проверял). Но в ваших примерах как раз идеалистический иммутабельный подход.


Дык какой смысл рассуждать о преимуществах таких вот трандьюсеров на коленках, если на реальных больших массивах, они будут в сотни тысяч раз медленнее императивного for-of цикла? У вас же аллокационный ад по перекладыванию всего массива в каждом звене-reducer-е. Зачем тогда рассуждать о какой-то производительности при этом, если вы своими же руками её просто уничтожили?


P.S. лечится это тем, что reducer просто использует .push вместо .concat и возвращает тот же массив, что и получил.
P.S.S. ничего против редьюсеров и трансдьюсеров не имею, просто нельзя их так идеалистично готовить, они при этом теряют всякий смысл и превращаются в пародию.

Sign up to leave a comment.