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

2.2 KiB

id title challengeType forumTopicId dashedName
587d7dab367417b2b2512b70 Iniciar com currying e aplicação parcial 1 301232 introduction-to-currying-and-partial-application

--description--

A aridade de uma função é o número de argumentos que ela toma. Realizar currying em uma função significa transformar uma função de aridade N em N funções de aridade 1.

Em outras palavras, a função é reestruturada para que ela receba apenas um argumento e retorne outra função que recebe o próximo argumento e assim por diante.

Exemplo:

function unCurried(x, y) {
  return x + y;
}

function curried(x) {
  return function(y) {
    return x + y;
  }
}

const curried = x => y => x + y

curried(1)(2)

curried(1)(2) retornaria 3.

Isso é útil em seu programa quando você não pode 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 será uma referência à função retornada que recebe o próximo argumento quando ele estiver disponível. Um exemplo usando a função do exemplo acima:

const funcForY = curried(1);
console.log(funcForY(2)); // 3

Da mesma forma, aplicação parcial pode ser descrita como a aplicação de alguns argumentos a uma função e o retorno de outra função à qual é aplicada a mais argumentos. Exemplo:

function impartial(x, y, z) {
  return x + y + z;
}

const partialFn = impartial.bind(this, 1, 2);
partialFn(10); // 13

--instructions--

Complete a função add de forma que ela use currying para adicionar os parâmetros x, y e z.

--hints--

add(10)(20)(30) deve retornar 60.

assert(add(10)(20)(30) === 60);

add(1)(2)(3) deve retornar 6.

assert(add(1)(2)(3) === 6);

add(11)(22)(33) deve retornar 66.

assert(add(11)(22)(33) === 66);

No código deve haver uma instrução final que retorna x + y + z.

assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g));

--seed--

--seed-contents--

function add(x) {
  // Only change code below this line


  // Only change code above this line
}

add(10)(20)(30);

--solutions--

const add = x => y => z => x + y + z