Что такое каррирование (Currying) в JavaScript
Каррирование (Currying) — это техника преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает по одному аргументу.
Зачем нужно каррирование?
- Переиспользуемость: можно заранее зафиксировать часть аргументов.
- Чистота функций: каррированные функции легче тестировать и комбинировать.
- Функциональный стиль: часто применяется в функциональном программировании.
Простой пример
function sum(a) {
return function (b) {
return function (c) {
return a + b + c;
};
};
}
console.log(sum(1)(2)(3)); // 6
Здесь sum
— каррированная функция, она принимает один аргумент за раз.
Частичное применение
function multiply(a) {
return function (b) {
return a * b;
};
}
const double = multiply(2); // частично применили функцию
console.log(double(5)); // 10
Универсальная функция каррирования
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
} else {
return (...next) => curried(...args, ...next);
}
};
}
function add(a, b, c) {
return a + b + c;
}
const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1, 2)(3)); // 6
Отличие от обычной функции
Характеристика | Обычная функция | Каррированная функция |
---|---|---|
Вызов | sum(1, 2, 3) | sum(1)(2)(3) |
Применение аргументов | Все сразу | По одному |
Переиспользование | Сложнее | Удобно фиксировать часть аргументов |
Когда применять каррирование?
- Когда нужно частично применить аргументы
- Когда используется функциональный стиль (например, с map, filter, reduce)
- При составлении сложных функций из простых
Итог:
Каррирование — мощный приём в функциональном программировании. Он помогает писать более модульный, читаемый и повторно используемый код, особенно в цепочках и колбэках.