> Tutoriel LeekScript
Cette page est partiellement obsolète. En Leekscript, la curryfication ne sert plus qu'à rendre le code plus lisible, elle ne fait plus gagner d'opérations depuis que le coût d'un appel à une fonction est passé à 1 quel que soit le nombre de paramètres.
En programmation fonctionnelle, la curryfication désigne l'opération qui fait passer d'une fonction à plusieurs arguments à une fonction à un argument et qui retourne une fonction qui prend le reste des arguments. L'opération inverse est évidemment possible et se nomme la décurryfication.
Le terme vient du nom du mathématicien américain Haskell Curry.
Prenons une fonction qui prend 2 arguments et qui renvoie la somme des 2 :
function add(x, y) { return x + y; }
Se tranforme en méthode curryfiée
function add_curried(x) { return function(y) { return x + y; }; }
Exemple d'usage
//Méthode classique var somme = add(1, 3);
//Méthode curry var add1 = add_curried(1); var somme = add1(3);
Cet exemple est juste pour présenter simplement le fonctionnement, dans ce cas il n'y a pas d'intêret de passer par la curryfication. Voyons un autre exemple plus intéressant. Imaginons qu'on a un tableau de n éléments numériques et on veut ajouter 1 à tous les éléments.
//Méthode classique for(var key:var element in array) { array[key] = add(1, element); }
//Méthode curry var add1 = add_curried(1); for(var key:var element in array) { array[key] = add1(element); }
L'avantage ici se voit en termes d'optimisation, dans la boucle au lieu d'appeler une fonction à 2 paramètres, on n'appelle plus qu'une fonction à un paramètre. Plus le nombre d'éléments dans le tableau est important, plus le gain est important.
Comme on l'a vu précédement le principal usage est pour les fonctions appelées dans des boucles et dont un ou plusieurs de ses paramètres ne dépendent pas de la boucle. La Mémoïsation est un parfait exemple d'usage.
Prenons par exemple notre fonction lineOfSight avec mémoïsation (définie ici) :
Si on appelle cette fonction dans une boucle, les deux opérations vont nous peser ! La curryfication peut nous aider :
Notre fonction renvoie une autre fonction, qui pourra utiliser les paramètres de la première, c'est un peu difficile a comprendre la première fois, mais bien utilisée cette méthode est trés efficace ! Un petit exercice : on peut optimiser cette fonction encore plus, à vous de trouver comment !
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.