--- id: 587d7dab367417b2b2512b70 title: Introduction to Currying and Partial Application challengeType: 1 videoUrl: '' localeTitle: Introdução ao Currying e Aplicação Parcial --- ## Description
A arity de uma função é o número de argumentos requeridos. Currying uma função significa converter uma função de N arity em N funções de arity 1. Em outras palavras, ela reestrutura uma função, de modo que recebe um argumento, depois retorna outra função que recebe o próximo argumento, e assim por diante. Aqui está um exemplo:
// Função sem curry
function unCurried (x, y) {
return x + y;
}

// Função curry
função curry (x) {
função de retorno (y) {
return x + y;
}
}
curry (1) (2) // Retorna 3
Isso é útil em seu programa se você não puder fornecer todos os argumentos para uma função de uma só vez. Você pode salvar cada chamada de função em uma variável, que conterá a referência da função retornada que recebe o próximo argumento quando estiver disponível. Aqui está um exemplo usando a função curried no exemplo acima:
// Chame uma função curry em partes:
var funcForY = curry (1);
console.log (funcForY (2)); // Imprime 3
Da mesma forma, partial application pode ser descrita como aplicando alguns argumentos a uma função por vez e retornando outra função que é aplicada a mais argumentos. Aqui está um exemplo:
// Função imparcial
função imparcial (x, y, z) {
return x + y + z;
}
var partialFn = impartial.bind (isso, 1, 2);
partialFn (10); // Retorna 13
## Instructions
Preencha o corpo da função add para usar o currying para adicionar os parâmetros x , y e z .
## Tests
```yml tests: - text: add(10)(20)(30) deve retornar 60 . testString: 'assert(add(10)(20)(30) === 60, "add(10)(20)(30) should return 60.");' - text: add(1)(2)(3) deve retornar 6 . testString: 'assert(add(1)(2)(3) === 6, "add(1)(2)(3) should return 6.");' - text: add(11)(22)(33) deve retornar 66 . testString: 'assert(add(11)(22)(33) === 66, "add(11)(22)(33) should return 66.");' - text: Seu código deve incluir uma declaração final que retorne x + y + z . testString: 'assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g), "Your code should include a final statement that returns x + y + z.");' ```
## Challenge Seed
```js function add(x) { // Add your code below this line // Add your code above this line } add(10)(20)(30); ```
## Solution
```js // solution required ```