Göm menyn

Funktionell programmering som paradigm

Vad är ett programmeringsparadigm?

Paradigm är från grekiskans paradigma som betyder mönster, exempel eller föredöme. Ett programmeringsparadigm är en fundamental programmeringsstil. De består av ett system av idéer som ligger till grund för designen av programmeringsspråk. När man designar, organiserar och skriver program använder man sig ofta av en model baserad på särskilda koncept, denna modell är ett programmeringsparadigm.

Man kan se programmeringsparadigmet som mellansteget mellan idéer och koncept.

Paradigm

Paradigm-karta

De vanligaste paradigmen

  • Imperativ programmering - ett program är en följd av satser som manipulerar globala datastrukturer så att deras tillstånd förändras över tid.
  • Objektorienterad programmering - ett program är en uppsättning objekt som har vissa egenskaper och kan utföra vissa metoder. Programkörning innebär att meddelanden skickas mellan dessa objekt.
  • Funktionell programmering - ett program är en uppsättning funktioner vars utdata enbart beror av indata, d.v.s de har inga sidoeffekter och manipulerar inte globala datastrukturer.

Egenskaper hos funktionell programmering

I funktionell programmering betraktas en programkörning som en beräkning av en serie matematiska funktioner. Dessa funktioner har inga sidoeffekter, d.v.s förutom att returnera ett värde undviker de in- och utmatning och ändrar inga värden som någon annan kan komma åt, varken globala variabler eller t.ex. funktionsparametrar.

Funktionell funktion

I funktionell programmering så undviks ofta så kallade muterbara (förändringsbara) datastrukturer, även tilldelningar undviks ofta i funktionell programmering. Detta betyder bland annat att istället för att använda resultatvariabler och for-loopar så sköts upprepning gärna med rekursion.

Vidare så betraktas funktioner som första ordningens objekt, d.v.s funktioner kan skapa och använda andra funktioner som värde.

Fördelar med funktionell programmering

En av de största fördelarna är att i funktionell programmering så är varje funktion en självständig enhet som inte är beroende av någon annan. Detta får flera olika konsekvenser:

  • Varje funktion kan utvecklas och testas för sig.
  • En funktion kan användas var som helst i programflödet.
  • Funktionerna kan lättare kombineras med varandra till större, mer komplexa funktioner.
  • Färdiga program tenderar att bli kompakta, lätta att underhålla, skalbara, paralleliserbara och återanvändbara.

Nackdelar med funktionell programmering

Bland alla dess fördelar så har även funktionell programmering en del nackdelar också.

  • Funktionell programmering kan upplevas som mer komplicerat än "traditionell" imperativ programmering
  • Det stora fokuset på rekursion och skapandet av många små funktioner gör programmen lite långsammare.
  • Sidoeffekter (så som in- och utmatning) hanteras inte i strikt funktionell programmering, vilket kan göra det svårt att använda i "verkliga" projekt.
  • Funktionella språk har inte haft särskilt stor kommersiell framgång, med några undantag, utan har främst varit en akademisk angelägenhet.

Funktionell programmering i verkligheten

Det är få som använder strikt funktionell programmering genomgående i ett projekt, i stället begränsar man det till delar av systemet eller använder tankesättet lite mer pragmatiskt. Några språk som i olika hög grad stödjer funktionell programmering:

  • Common lisp
  • Scheme
  • Racket
  • Clojure
  • Erlang
  • OCaml
  • Haskell
  • Scala
  • F#

Funktionella språk och funktionell programmering har fått ett litet uppsving de senaste åren. Bland annat har språket Erlang (som utvecklades av Ericsson i slutet på 80-talet) kommit till heders igen och används av bland annat Facebook och Klarna.

Referenser

https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2021-12-03