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. En funksjon f som kalles to ganger med argumentet x, vil produsere den samme verdien f(x) hver gang – samme data inn vil alltid gi samme produkt ut. Ved å eliminere sideeffekter, dvs. tilstandsendringer som ikke avhenger av funksjonens inndata, 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.
- v
- d
- r
- Aktørbasert
- Aspektorientert
- Dataflyt
- Flytbasert
- Deklarativ
- Deriverbar
- Domenespesifikk
- Dynamisk
- Esoterisk
- Funksjonell
- Følbart
- Hendelsesdrevet
- Imperativ
- Malprosessor
- Makro
- Metaprogrammering
- Klassebasert
- Kommandokø (pipeline)
- Konkatenativ
- Logisk
- Objektbasert
- Objektorientert
- Prosedyrisk
- Prototypebasert
- Regelbasert
- Samtidig
- Selvmodifiserende
- Skripting
- Stakkorientert
- Synkront
- Tabell
- Utvidbar
- 1. generasjon
- 2. generasjon
- 3. generasjon
- 4. generasjon
- 5. generasjon