Funktionsprogrammering
Flytteforslag |
Inden for datalogi er funktionsprogrammering eller funktionel programmering et deklarativt programmeringsparadigme hvor man behandler beregning som evalueringen af matematiske funktioner og derved undgår variable, som kan skifte tilstand, men bruger i stedet værdier, som ikke kan.
Matematiske funktionerer har en værdimængde (inputværdier, x'er) og en definitionsmængde (returværdier, y'er). Hvis en funktion beregner andet end sin returværdi, kalder man det en sideeffekt. Sideeffekter kan opdeles i dem som gemmer tilstand i hukommelsen og dem som udfører I/O. Man siger derfor at funktionsprogrammering er at programmere med funktioner uden sideeffekter.
Det står i modsætning til imperativ programmering hvor funktioner ikke behøver at leve op til den matematiske definition og kan ændre på variable uden for funktionens virkefelt. Det vil naturligvis gøre de fleste programmer nytteløse, hvis man betragter formidling af resultater som en sideeffekt, og programmeringssprog kan derfor opdeles i hvilken grad af renhed de besidder.
Funktionsprogrammering har sit udspring i lambdakalkyle, der blev udviklet i 1930'erne til at analysere hvad det er muligt at beregne matematisk og til at undersøge rekursive funktioner. Programmeringssprog der bygger på funktionsprogrammering kan derfor siges at være en udvidelse af lambdakalkylen.
Eksempler på programmeringssprog, der anvender aspekter af funktionsprogrammering: Standard ML, Lisp, Scheme, Clojure, Erlang, O'Caml Scala, Haskell.