Hack Frontend Community

Что такое каррирование (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)
  • При составлении сложных функций из простых

Итог:

Каррирование — мощный приём в функциональном программировании. Он помогает писать более модульный, читаемый и повторно используемый код, особенно в цепочках и колбэках.