2008-01-03

Currying i Javascript

En trevlig sak som finns i funktionella språk är currying och partial application, vilket lite förenklat kan förklaras som att om man anropar en funktion med färre argument än vad funktionen kräver får man tillbaka en ny funktion som kräver de resterande argumenten (egentligen står currying för själva transformerandet av en funktion till en annan).

Anta att vi har en funktion add som givet två tal, a & b, adderar dem med varandra.

function add a b -> a+b



Då kan du skapa en ny funktion increase som alltid adderar 1 till ett tal så här

increase = add (1)
increase (7) ==> ger resultatet 8



Trivialt exempel, men det visar att man på det här sättet kan låta funktioner vara byggblock som kan återanvändas och ingå i andra funktioner på enkelt sätt.


Svend Tofte har en intressant artikel om hur detta kan göras i Javascript (han har även ett exempel som visar när currying kan vara användbart): http://www.svendtofte.com/code/curried_javascript/


 


Och, ja man kan fippla till det även i C#: http://diditwith.net/2007/08/15/TheArtOfCurrying.aspx