> Tutorial LeekScript
*Esta página está parcialmente obsoleta. No Leekscript, o currying é usado apenas para tornar o código mais legível, não economiza mais operações, pois o custo de uma chamada a uma função é reduzido a 1, independentemente do número de parâmetros. *
Na programação funcional, currying refere-se à operação que leva uma função multi-argumento para uma função de um argumento e retorna uma função que leva o resto dos argumentos. A operação inversa é obviamente possível e é chamada de decurrificação.
O termo vem do nome do matemático americano Haskell Curry.
Vamos pegar uma função que recebe 2 argumentos e retorna a soma dos 2:
função adicionar(x, y) { retornar x+y; }
Transforma-se em método curry
função add_curried(x) { função de retorno(y) { retornar x+y; }; }
Exemplo de uso
//método clássico var soma = soma(1, 3);
//método curry var add1 = add_curried(1); var soma = add1(3);
Este exemplo é apenas para mostrar como funciona, neste caso não faz sentido passar por currying. Vejamos outro exemplo mais interessante. Imagine que temos um array de n elementos numéricos e queremos somar 1 a todos os elementos.
//método clássico for(chave var: elemento var no array) { array[chave] = add(1, item); }
//método curry var add1 = add_curried(1); for(chave var: elemento var no array) { array[chave] = add1(elemento); }
A vantagem aqui é vista em termos de otimização, no loop ao invés de chamar uma função com 2 parâmetros, chamamos apenas uma função com um parâmetro. Quanto maior o número de elementos na matriz, maior o ganho.
Como vimos anteriormente, o uso principal é para funções chamadas em loops e um ou mais cujos parâmetros não dependem do loop. Memoization é um exemplo perfeito de uso.
Tomemos, por exemplo, nossa função lineOfSight com memoização (definida aqui):
Se chamarmos essa função em um loop, as duas operações nos sobrecarregarão! A Currificação pode nos ajudar:
Nossa função retorna outra função, que pode usar os parâmetros da primeira, é um pouco difícil de entender na primeira vez, mas bem usado esse método é muito eficaz! Um pequeno exercício: podemos otimizar ainda mais essa função, cabe a você descobrir como!
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.