Hopp til innhold

Funksjonell programmering

Fra Wikipedia, den frie encyklopedi

Funksjonell programmering brukes innenfor informatikken om et programmeringsparadigme som behandler utregninger som en evaluering av matematiske funksjoner og unngår tilstandsendringer og foranderlige data. Det er et deklarativt programmeringsparadigme, i motsetning til imperativt programmeringsparadigme, som betyr at programmering er gjort med uttrykk som deklarerer hva som skal utføres i motsetning til å beskrive hvordan.

I funksjonell programmering avhenger utverdien bare av argumentene som er innverdien til denne funksjonen, slik at en funksjon f som kalles to ganger med argumentet x, vil produsere den samme verdien f(x) hver gang. Samme input gir alltid samme output. Ved å eliminere sideeffekter, dvs. tilstandsendringer som ikke avhenger av funksjonens input, kan man gjøre det mye enklere å forstå og forutsi programmets adferd. Dette er en av hovedmotivasjonene bak utviklingen av funksjonell programmering.

Selv om noen av de matematiske prinsippene bak funksjoner har vært kjent siden 1930-tallet og funksjonell programmering har eksistert siden 1950-tallet, er det først etter årtusenskiftet at utbredelsen og populariteten har fått en oppsving i bredere lag blant utviklere. Det er flere årsaker til dette, men en av de er at CPU-er med flere kjerner ble utbredt i de fleste datamaskiner og mobiltelefoner og at det å spre en oppgave ut til flere kjerner og dermed kjøre oppgaven raskere ofte er enklere og mer håndterlig uten å skape feil i funksjonelle språk. Språk som (Common) Lisp, Haskell, Erlang, Scala, F# (F-sharp), Clojure m.fl. nevnes ofte som funksjonelle programmeringsspråk. I de fleste andre populære høynivåspråk støttes noen av prinsippene slik at kildekode også i disse kan skrives i en delvis funksjonell stil, som blant annet støtte for førsteklasses-, anonyme- og høyereordens funksjoner, enderekursjonsoptimalisering, støtte for å unngå uønskede sideeffekter, persistens i datastrukturer m.m.