← Назад к вопросам
Реализовать функцию curry
2.0 Middle🔥 241 комментариев
#React#Браузер и сетевые технологии
Условие
Напишите функцию curry(fn), которая преобразует функцию с несколькими аргументами в последовательность функций с одним аргументом.
Требования
- Функция должна работать с функциями любой арности
- Каррированная функция должна накапливать аргументы
- Когда накоплено достаточно аргументов - вызвать оригинальную функцию
Примеры
function sum(a, b, c) {
return a + b + c;
}
const curriedSum = curry(sum);
curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6
curriedSum(1)(2, 3); // 6
curriedSum(1, 2, 3); // 6
Бонус
Добавьте поддержку placeholder для частичного применения аргументов.
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Задача на функцию curry демонстрирует функциональное программирование.
Решение 1: Базовый curry
function curry(fn) {
const arity = fn.length;
return function curried(...args) {
if (args.length >= arity) {
return fn(...args);
}
return (...nextArgs) => curried(...args, ...nextArgs);
};
}
function sum(a, b, c) {
return a + b + c;
}
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
Как работает
- fn.length получает количество параметров
- Накапливаем аргументы через замыкание
- Когда достаточно - вызываем функцию
- Поддерживает смешанный стиль
Практический пример
function fetchAPI(baseURL, headers, endpoint, query) {
const url = new URL(endpoint, baseURL);
return fetch(url.toString(), { headers });
}
const curriedFetch = curry(fetchAPI);
const apiClient = curriedFetch("https://api.example.com")({
Authorization: "Bearer token"
});
const getUsers = () => apiClient("/users");
Best Practices
- fn.length для арности функции
- Рекурсивные замыкания - основа работы
- Типизация через conditional types
- Тестировать все варианты вызова
- Помнить о производительности замыканий
Для собеседования
- Начните с базовой версии
- Объясните механизм (замыкания, рекурсия)
- Покажите практический пример
- Обсудите типизацию
- Упомяните compose и partial
Итог: Базовый curry - простой и понятный. TypeScript версия для типизированного кода.