terminologia - Quais as vantagens de usar "currying" em uma função? - Stack Overflow em Português
Quais as vantagens de usar "currying" em uma função? [duplicada]
O que é e quais as vantagens do Currying? 2 respostas
Entendo que, simplificando rudemente, usar currying é quebrar uma função que recebe vários argumentos em funções menores que recebem apenas partes dos argumentos da função original. Considere o código abaixo como exemplo:
//função de somar com a sintaxe comum
console.log("Função comum: " + soma(1,1));
//função de somar com a sintaxe "currificada"
console.log("Função com curry: " + somacurry(2)(2));
//função que exibe as informações da pessoa também com curry
console.log(pessoa("Artur")("Trapp")("21"));
function soma(a,b) { return a + b; }
function somacurry(a){
return function (b) { return a + b; }
function pessoa(nome){
return function (sobrenome){
return function (idade) {
return "Olá, meu nome é " + nome + " " + sobrenome + ", e eu tenho " + idade + " anos!";
Sei que essa técnica é bastante usada em linguagens funcionais (como Haskell). Mas não sou capaz de enxergar vantagens, sejam elas em simplificar a sintaxe ou em performance. Quais seriam as vantagens de usar uma função com a técnica de currying, no lugar de funções com sintaxe comum?
PS: Não achei tags ideais
terminologia sintaxe programação-funcional
editada 28/08/17 às 20:07
perguntada 28/08/17 às 19:57
marcada como duplicata por Tiago S, Comunidade♦ 29/08/17 às 11:57
Currying é uma técnica para reescrita de funções com múltiplos parâmetros como a composição de funções de um parâmetro. A função do tipo curry pode ser aplicada apenas a um subconjunto de seus parâmetros. O resultado é uma função onde os parâmetros neste subconjunto são agora fixados como constantes, e os valores do resto dos parâmetros ainda não são especificados. Esta nova função pode ser aplicada aos parâmetros restantes para obter o valor da função final. Por exemplo, uma função adiciona(x,y) = x + y pode ser do tipo curry de forma que o valor de retorno adiciona(2) — note que não há um parâmetro y — será uma função anônima, o que é equivalente à função adiciona2(y) = 2 + y. Esta nova função tem apenas um parâmetro e corresponde a adicionar 2 a um número. Novamente, isso é apenas possível porque as funções são tratadas como valores de primeira importância.
É mais voltada a programação funcional onde qualquer simplificação de sintaxe é bem vinda, embora linguagens como JavaScript também contém com esse recurso, porém nunca vi um exemplo de aplicação fora do escopo do aprendizado deste.
respondida 28/08/17 às 20:42
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag terminologia sintaxe programação-funcional ou faça sua própria pergunta.