Comments 26
Каррирование и частичное применение функций очень похожи друг на друга, но концепции это разные.
Потом прочитал главу «О практическом применении концепций каррирования и частичного применения функций» (и далее пост). Понял идею частичного применения. Но зачем нужно каррирование?
В чем их принципиальное отличие (по крайней мере так утверждается в статье)?
Каррирование (от англ. currying, иногда — карринг) — преобразование функции от многих аргументов в набор функций, каждая из которых является функцией от одного аргумента.
In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes multiple arguments into evaluating a sequence of functions, each with a single argument.
Универсальная функция для частичного применения других функций
простой, но не самый эффективный вариант реализации, когда-то писал свой вариант с бенчмарками относительно других реализаций: https://github.com/Riim/curry#benchmark .
Ну и где у вас в сравнении функция partial? Может, мы разные репозитории смотрим?
вы решали не ту же самую задачу, а ее надмножество
То есть если моя функция решает ту же задачу, что и функция в статье, плюс может делать что-то ещё, то сравнивать эти функции на одинаковых задачах, которые они обе умеют решать по вашему нельзя? Где логика?))
именно по этой причине функция partial не попала в ваше сравнение
Попала, в приведённом списке light-curry примерно настолько же примитивно сделан. Да, сам по себе он быстрее создаёт каррированную функцию, но созданная функция в три раза медленнее такой же, созданной моей библиотекой. Почему то мне кажется, что скорость создаваемой каррированной функции намного важнее, чем скорость её создания, так как она может быть вызвана множество раз (обычно так и случается). Вы так не думаете?
Логика в том, что на тех задачах, которые умеют обе функции, приведенная тут функция partial таки быстрее.
Попала, в приведённом списке light-curry примерно настолько же примитивно сделан.
light-curry использует arguments вместо spread operator, а это известный убийца производительности.
Логика в том, что на тех задачах, которые умеют обе функции, приведенная тут функция partial таки быстрее.
так вы согласны, что функции можно сравнивать?
light-curry использует arguments вместо spread operator, а это известный убийца производительности.
вы думаете если переписать без arguments это что-то сильно поменяет? Хорошо, попробуйте! Предлагайте ваш вариант, который создаёт более быстрые каррированные функции. Будет интересно посмотреть.
Прежде я уже встречал подобные приемы в чужом коде, но не знал, что это называется каррированием. За собой не припомню случаев, чтобы я делал нечто подобное в своем коде.
Однако, сейчас подумал, что этот прием мог бы мне пригодиться в паре моментов, в моем недавнем проекте. Теперь немного жаль…
Я бы назвал эту статью "Каррирование по-русски".
Каррирование функций в JavaScript