Skip to main content

Каррирование (currying)

Каррирование (currying) в JavaScript — это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает только один аргумент.

Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как f(a, b, c), а как f(a)(b)(c).
Каррирование не вызывает функцию. Оно просто трансформирует её.
Делает код более декларативным и удобным для переиспользования.

Основная идея:

Вместо:

function sum(a, b, c) {
return a + b + c;
}
sum(1, 2, 3); // 6

После каррирования:

function curriedSum(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
curriedSum(1)(2)(3); // 6

Зачем нужно каррирование?

  1. Частичное применение — можно фиксировать часть аргументов и получать новую функцию:
const addTwo = curriedSum(1)(2);
addTwo(3); // 6
addTwo(5); // 8
  1. Удобство композиции функций — каррированные функции легче комбинировать.
  2. Чистые функции — каррирование часто используется в функциональном программировании.

Автоматическое каррирование (с помощью утилит):

Можно написать вспомогательную функцию:

function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function(...args2) {
return curried.apply(this, args.concat(args2));
};
}
};
}

const curriedSum = curry(sum);
curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6

🔹 Пример из реального мира (React + Redux):

const connect = (mapStateToProps) => (mapDispatchToProps) => (Component) => {
// логика подключения компонента
console.log();
});
// Использование:
connect(mapState)(mapDispatch)(MyComponent);

🚀 Источник: DeepSeek
🚀 Источник: https://learn.javascript.ru/currying-partials