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
Typer programmeringsspråk
Paradigme
  • 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
Nivå
  • Maskin
  • Assembler
  • Kompilert
  • Tolket
Generasjon
  • 1. generasjon
  • 2. generasjon
  • 3. generasjon
  • 4. generasjon
  • 5. generasjon
Relatert
Oppslagsverk/autoritetsdata
Encyclopædia Britannica · GND · LCCN · BNF · BNF (data) · NKC · BNE · BBC Things