Что такое карри?
Каррирование — это преобразование функций, которое переводит функцию из вызываемой как f(a, b, c)
в вызываемую как f(a)(b)(c)
.
function curry(f) { // curry(f) does the currying transform return function(a) { return function(b) { return f(a, b); }; }; } // usage function sum(a, b) { return a + b; } let curriedSum = curry(sum); alert( curriedSum(1)(2) ); // 3
Расширенная реализация
function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.concat(args2)); } } }; }
Почему я должен использовать каррирование?
Есть несколько причин, по которым карри идеальна:
- Каррирование — это метод проверки, позволяющий убедиться, что вы получили все необходимое, прежде чем продолжить.
- Это поможет вам избежать повторной передачи одной и той же переменной.
- Он делит вашу функцию на несколько более мелких функций, которые могут выполнять одну обязанность. Это делает вашу функцию чистой и менее подверженной ошибкам и побочным эффектам.
- Он используется в функциональном программировании для создания функции более высокого порядка.
Каррирование даст нам возможность разделять параметры, необходимые для выполнения функции. И это признак зрелого дизайна системы. Потому что одним из главных столпов качества кода является разделение задач.
Как каррирование может помочь с обработчиками реакции?
import React from 'react'; function MyComponent() { handleClick(count) { return (e) => console.log(e, count); } render() { return( <div> <a onClick={handleClick(1)}>Clicked once</a> <a onClick={handleClick(2)}>Clicked twice</a> <a onClick={handleClick(3)}>Clicked thrice</a> </div> ); } }
Когда компонент отрисовывается, обработчики onClick будут вызываться и возвращать функцию (замыкания) с закрытыми значениями счетчика.
Источники:-
https://javascript.info/currying-partials
https://blog.logrocket.com/understanding-javascript-currying/