Функциональный JavaScriptКарированиеhard

Карирование

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

// обычная функция const sum = (a, b, c) => a + b + c; // с помощью декоратора curry получаем новую функцию const curriedSum = curry(sum); // пример вызова новой функции console.log(curriedSum(2)(3)(9)); // 14

Наша задача пойти чуть дальше и реализовать функцию curry, которая позволит передавать сразу по несколько аргументов за один вызов.

function sum(a, b, c, d, e, f, g, h, j) { return a + b + c + d + e + f + g + h + j; } const res = curry(sum, 1)(2, 3, 4)(5, 6)()(7)(8, 9); console.log(res); // 45

Функция curry должна «сохранять состояние»:

function sum(a, b, c, d, e, f, g, h, j) { return a + b + c + d + e + f + g + h + j; } const res = curry(sum, 1)(2, 3, 4)(5, 6); // накопили 1 + 2 + 3 + 4 + 5 + 6 === 21 const res2 = res(7); // накопили 28 console.log(res(1, 1, 1)); // 24 console.log(res(1, 2, 3)); // 27 console.log(res2(2, 2)); // 32