Funksjonell programmering
Kildeløs: Denne artikkelen mangler kildehenvisninger, og opplysningene i den kan dermed være vanskelige å verifisere. Kildeløst materiale kan bli fjernet.
|
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.