freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-an.../functional-programming/introduction-to-currying-an...

3.1 KiB

id title challengeType videoUrl localeTitle
587d7dab367417b2b2512b70 Introduction to Currying and Partial Application 1 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

tests:
  - text: <code>add(10)(20)(30)</code> deve retornar <code>60</code> .
    testString: 'assert(add(10)(20)(30) === 60, "<code>add(10)(20)(30)</code> should return <code>60</code>.");'
  - text: <code>add(1)(2)(3)</code> deve retornar <code>6</code> .
    testString: 'assert(add(1)(2)(3) === 6, "<code>add(1)(2)(3)</code> should return <code>6</code>.");'
  - text: <code>add(11)(22)(33)</code> deve retornar <code>66</code> .
    testString: 'assert(add(11)(22)(33) === 66, "<code>add(11)(22)(33)</code> should return <code>66</code>.");'
  - text: Seu código deve incluir uma declaração final que retorne <code>x + y + z</code> .
    testString: 'assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g), "Your code should include a final statement that returns <code>x + y + z</code>.");'

Challenge Seed

function add(x) {
  // Add your code below this line


  // Add your code above this line
}
add(10)(20)(30);

Solution

// solution required