Funksjonell programmering

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 økt i bredere lag blant utviklere. En av årsakene er at CPU-er med flere kjerner i perioden ble utbredt datamaskiner og mobiltelefoner og at å spre en oppgave ut til flere kjerner som jobber i parallell vil kunne utføre noen oppgaver raskere og at det er mer håndterlig å gjøre dette feilfritt i funksjonelle språk. Språk som (Common) Lisp, Haskell, Erlang, Scala, F# (F-sharp), Clojure nevnes ofte som funksjonelle programmeringsspråk med varierende grad av renhet. 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. 

Programmering