← Назад к вопросам

Что такое каррирование в JS?

2.2 Middle🔥 101 комментариев
#Node.js и JavaScript#Алгоритмы и структуры данных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Currying в JavaScript

Определение

Каррирование это преобразование функции с несколькими параметрами в цепь функций с одним параметром каждая. Названо в честь логика Хаскелла Карри.

Пример

// Обычная функция
const add = (a, b) => a + b;
add(2, 3); // 5

// Каррированная
const curriedAdd = (a) => (b) => a + b;
curriedAdd(2)(3); // 5

// Или пошагово
const add2 = curriedAdd(2);
add2(3); // 5

Три параметра

const multiply = (a) => (b) => (c) => a * b * c;
multiply(2)(3)(4); // 24

Автоматическое каррирование

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    }
    return (...more) => curried(...args, ...more);
  };
}

Практический пример

const filterBy = (field) => (value) => (array) => {
  return array.filter(item => item[field] === value);
};

const users = [{role: 'admin'}, {role: 'user'}];
const getAdmins = filterBy('role')('admin');
getAdmins(users); // [{ role: 'admin' }]

Middleware

const authorize = (role) => (handler) => (req, res) => {
  if (req.user.role !== role) {
    return res.status(403).send('Forbidden');
  }
  handler(req, res);
};

app.delete('/users/:id', authorize('admin')(deleteHandler));

Преимущества

Реиспользование: создаёшь специальные функции. Композиция: легче комбинировать функции. Lazy evaluation: функция выполняется когда получены все аргументы.

Недостатки

Сложнее читать. Производительность немного хуже. Debugging затруднён.

Что такое каррирование в JS? | PrepBro