PassFront
  1. PassFront
  2. База знаний
  3. Функции

Что такое каррирование функции?

Функции

Каррирование (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) — цепочку функций по одному аргументу через замыкания. Даёт частичное применение, переиспользование и композицию. Отличается от частичного применения, где фиксируют несколько аргументов сразу.

Другие вопросы раздела