Что такое каррирование функции?
Функции
Каррирование (currying) — это преобразование функции с несколькими аргументами в цепочку функций, каждая из которых принимает по одному аргументу.
Идея
Вместо f(a, b, c) — f(a)(b)(c). Каждая функция «запоминает» аргумент через замыкание и возвращает следующую.
// Обычная
const add = (a, b) => a + b;
// Каррированная
const curriedAdd = (a) => (b) => a + b;
curriedAdd(2)(3); // 5
const add2 = curriedAdd(2); // частичное применение
add2(10); // 12Зачем нужно
- Частичное применение — зафиксировать часть аргументов, получить специализированную функцию.
- Переиспользование и композиция — удобно комбинировать функции.
- Конфигурируемые функции — например,
log(level)(message).
const filterBy = (key) => (value) => (arr) =>
arr.filter((item) => item[key] === value);
const activeUsers = filterBy('status')('active');
activeUsers(users);Универсальный curry
Библиотеки (lodash _.curry) автоматически каррируют функцию любой арности.
Каррирование против частичного применения
Каррирование — строго по одному аргументу; частичное применение — фиксирует несколько сразу (например, через bind).
Коротко для собеседования
Каррирование превращает f(a,b,c) в f(a)(b)(c) — цепочку функций по одному аргументу через замыкания. Даёт частичное применение, переиспользование и композицию. Отличается от частичного применения, где фиксируют несколько аргументов сразу.