Каррирование может дать вам более глубокое понимание 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.