Introdução
Neste laboratório, exploraremos o conceito de currying e uncurrying de funções em JavaScript. Currying de funções é uma técnica que nos permite transformar uma função que aceita múltiplos argumentos em uma sequência de funções que aceitam cada uma um único argumento. Por outro lado, uncurrying de funções é o processo de transformar uma sequência de funções que aceitam cada uma um único argumento em uma função que aceita múltiplos argumentos. Através deste laboratório, aprenderemos como implementar ambas as técnicas em JavaScript.
Uncurry de uma Função
Para fazer o uncurry de uma função até uma profundidade especificada, use a função uncurry.
const uncurry =
(fn, n = 1) =>
(...args) => {
const next = (acc) => (args) => args.reduce((x, y) => x(y), acc);
if (n > args.length) throw new RangeError("Arguments too few!");
return next(fn)(args.slice(0, n));
};
Para usar a função uncurry, passe a função que você deseja fazer o uncurry e a profundidade até a qual você deseja fazê-lo como argumentos. A função retornará uma função variádica que você pode chamar com os argumentos que deseja passar.
Se você não especificar a profundidade, a função fará o uncurry até a profundidade 1.
const add = (x) => (y) => (z) => x + y + z;
const uncurriedAdd = uncurry(add, 3);
uncurriedAdd(1, 2, 3); // 6
Se o número de argumentos que você passar for menor que a profundidade especificada, a função lançará um RangeError.
Resumo
Parabéns! Você concluiu o laboratório de Uncurry Function. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.