Что такое карри?

Каррирование — это преобразование функций, которое переводит функцию из вызываемой как 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/