Каррирование может дать вам более глубокое понимание JavaScript. Давайте посмотрим, как это можно сделать с помощью стрелочных функций!
Что такое каррирование?
Существует способ свести функции с более чем одним аргументом к функциям с одним аргументом. Этот способ называется каррированием после Haskell B.Curry. [1]
Каррирование - это процесс сокращения функций более чем одного аргумента до функций одного аргумента с помощью лямбда-исчисления.
f(n, m) --> f'(n)(m)
Есть Неспешный?
О, да. Uncurrying - это операция, обратная каррированию.
f(n)(m) --> f'(n, m)
А как насчет частичного приложения?
Частичное применение означает, что вы предварительно применили функцию частично в отношении любого из ее аргументов.
f(n, m) --> f'(m)
Примеры каррирования в реальном мире
Вам должно быть интересно, как этот теоретический набор инструментов может быть использован в повседневной жизни.
Связывание JavaScript
Function.prototype.bind()
фактически выполняет частичное применение.
// first param is thisArg which is irrelevant now increment = add.bind(undefined, 1) increment(4) === 5
Реагировать и Redux
Самый простой вариант использования функции react-redux connect () - это чисто карризованный.
export default connect(mapStateToProps)(TodoApp)
Обработка событий
Обработчик событий можно повторно использовать для нескольких полей.
const handleChange = (fieldName) => (event) => { saveField(fieldName, event.target.value) } <input type="text" onChange={handleChange('email')} ... />
Рендеринг HTML
Функцию рендеринга можно повторно использовать для рендеринга похожих HTML-тегов.
Карри как функция высшего порядка
Мы можем определить curry, uncurry и papply как функции высшего порядка следующим образом. Обозначение стрелок является правоассоциативным, поэтому скобки можно опустить.
Характеристики
Карри и uncurry - это наоборот. Давай проверим.
Заключение
Карри как термин существует уже почти 40 лет и является существенным преобразованием в лямбда-исчислении.
В настоящее время JavaScript больше используется как функциональный язык, особенно с нативными обещаниями и стрелочными функциями. Чтобы овладеть языком, вы должны обладать некоторыми знаниями в области лямбда-исчисления и функционального программирования. Выходя за рамки «Банды четырех», это хороший способ создавать все более совершенные программные конструкции.
использованная литература
[1] Симпозиум Клини, стр. 86. Издательство Северной Голландии,
Амстердам, 1980.