Hvad er funktionel programmering?
โก Smart opsummering
Funktionel programmering er en mรฅde at bygge software pรฅ ved at sammensรฆtte rene funktioner og undgรฅ delte tilstande og muterbare data. Den lรฆgger vรฆgt pรฅ udtryk frem for sรฆtninger, sรฅ en funktions output kun afhรฆnger af dens input, hvilket gรธr programmer forudsigelige og testbare.

Hvad er funktionel programmering?
Funktionel programmering (ogsรฅ kaldet FP) er en mรฅde at tรฆnke pรฅ softwarekonstruktion ved at skabe rene funktioner. Den undgรฅr koncepter om delt tilstand og muterbare data, som observeres i objektorienteret programmering.
Funktionelle sprog lรฆgger vรฆgt pรฅ udtryk og deklarationer snarere end udfรธrelse af sรฆtninger. Derfor afhรฆnger vรฆrdioutput i FP, i modsรฆtning til andre procedurer, der afhรฆnger af en lokal eller global tilstand, kun af de argumenter, der sendes til funktionen.
Karakteristika for funktionel programmering
- Funktionel programmering fokuserer pรฅ resultater, ikke processen.
- Der er fokus pรฅ, hvad der skal beregnes.
- Data er uforanderlige.
- Funktionel programmering opdeler problemet i funktioner.
- Det er bygget pรฅ konceptet om matematiske funktioner, der bruger betingede udtryk og rekursion til at udfรธre beregningen.
- Den understรธtter ikke iteration som loop-udsagn og betingede udsagn som If-Else.
Historien om funktionel programmering
- Fundamentet for funktionel programmering er lambda-kalkulus. Den blev udviklet i 1930'erne til funktionel anvendelse, definition og rekursion.
- LISP var det fรธrste funktionelle programmeringssprog. McCarthy designede det i 1960.
- I slutningen af โโ70'erne definerede forskere ved University of Edinburgh ML (meta-sprog).
- I begyndelsen af โโ80'erne tilfรธjede Hope-sproget algebraiske datatyper til rekursion og ligningsrรฆsonnement.
- I รฅr 2004 blev funktionssproget 'Scala' udviklet.
Funktionelle programmeringssprog
Formรฅlet med ethvert FP-sprog er at efterligne matematiske funktioner. Den grundlรฆggende beregningsproces er dog anderledes i funktionel programmering.
Her er nogle af de mest fremtrรฆdende funktionelle programmeringssprog:
- Haskell
- SMG
- Clojure
- Scala
- erlang
- Rens
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
Grundlรฆggende funktionel programmeringsterminologi og Concepts
Uforanderlige data
Uforanderlige data betyder, at du nemt skal kunne oprette datastrukturer i stedet for at รฆndre eksisterende strukturer.
Referencegennemsigtighed
Funktionelle programmer bรธr udfรธre operationer, prรฆcis som om det var for fรธrste gang. Sรฅ du ved, hvad der muligvis er sket eller ikke er sket under programmets udfรธrelse, og hvad dets bivirkninger er. I FP-termer kaldes dette referentiel gennemsigtighed.
modularitet
Modulรฆrt design รธger produktiviteten. Smรฅ moduler kan kodes hurtigt og har stรธrre chance for genbrug, hvilket helt sikkert fรธrer til hurtigere programudvikling. Derudover kan modulerne testes separat, hvilket hjรฆlper dig med at reducere den tid, der bruges pรฅ enhedstestning og fejlfinding.
Maintainability
Vedligeholdelse er et simpelt udtryk, der betyder, at FP-programmering er lettere at vedligeholde, da du ikke behรธver at bekymre dig om ved et uheld at รฆndre noget uden for den givne funktion.
Fรธrsteklasses funktion
'Fรธrsteklassesfunktion' er en definition, der tilskrives programmeringssprogsenheder, der ikke har nogen begrรฆnsninger pรฅ deres brug. Derfor kan fรธrsteklassesfunktioner forekomme hvor som helst i programmet.
Lukning
En lukning er en indre funktion, der kan tilgรฅ variabler i den overordnede funktion, selv efter at den overordnede funktion er udfรธrt.
Funktioner af hรธjere orden
Funktioner af hรธjere orden tager enten andre funktioner som argumenter eller returnerer dem som resultater.
Funktioner af hรธjere orden tillader delvise anvendelser eller "currying". Denne teknik anvender en funktion pรฅ dens argumenter รฉt ad gangen, hvor hver anvendelse returnerer en ny funktion, der accepterer det nรฆste argument.
Ren funktion
En 'ren funktion' er en funktion, hvis input er erklรฆret som input, og ingen af โโdem skal skjules. Udgangene er ogsรฅ erklรฆret som output.
Rene funktioner reagerer pรฅ deres parametre. Den er ikke effektiv, hvis den ikke returnerer noget. Desuden tilbyder den det samme output for de givne parametre.
Eksempel:
Function Pure(a,b) { return a+b; }
Urene funktioner
Urene funktioner er det stik modsatte af rene funktioner. De har skjulte input eller output, og derfor kaldes de urene. Urene funktioner kan ikke bruges eller testes isoleret, da de har afhรฆngigheder.
Eksempel
int z; function notPure(){ z = z+10; }
Funktionssammensรฆtning
Funktionssammensรฆtning er at kombinere 2 eller flere funktioner for at lave en ny.
Delte stater
Delt tilstand er et vigtigt koncept i OOP-programmering. Grundlรฆggende handler det om at tilfรธje egenskaber til objekter. Hvis en harddisk f.eks. er et objekt, kan lagerkapacitet og diskstรธrrelse tilfรธjes som egenskaber.
Bivirkninger
Bivirkninger er enhver tilstandsรฆndring, der forekommer uden for en kaldt funktion. Det stรธrste mรฅl med ethvert FP-programmeringssprog er at minimere bivirkninger ved at adskille dem fra resten af โโsoftwarekoden. I FP-programmering er det vigtigt at fjerne bivirkninger fra resten af โโdin programmeringslogik.
Fordelene ved funktionel programmering
- Giver dig mulighed for at undgรฅ forvirrende problemer og fejl i koden.
- Nemmere at teste og udfรธre enhedstest og fejlfinde FP Code.
- Parallel behandling og samtidighed.
- Implementering af hot code og fejltolerance.
- Tilbyder bedre modularitet med kortere kode.
- รget produktivitet hos udvikleren.
- Understรธtter indbyggede funktioner.
- Funktionelle konstruktioner som Lazy Map & Lists osv.
- Tillader effektiv brug af Lambda-kalkulus.
Begrรฆnsninger ved funktionel programmering
- Det funktionelle programmeringsparadigme er ikke let, sรฅ det er svรฆrt at forstรฅ for begyndere.
- Svรฆr at vedligeholde, da mange objekter udvikler sig under kodningen.
- Krรฆver masser af mobning og omfattende miljรธopsรฆtning.
- Genbrug er meget kompliceret og krรฆver konstant refaktorering.
- Objekter reprรฆsenterer muligvis ikke problemet korrekt.
Funktionel programmering vs. objektorienteret programmering
| Funktionel programmering | OOP |
|---|---|
| FP bruger uforanderlige data. | OOP bruger Mutable data. |
| Fรธlger en model baseret pรฅ deklarativ programmering. | Fรธlger en imperativ programmeringsmodel. |
| Det, den fokuserer pรฅ, er: "Hvad du laver i programmet." | Det, den fokuserer pรฅ, er: "Hvordan du laver din programmering." |
| Understรธtter parallel programmering. | Ingen understรธttelse af parallel programmering. |
| Dens funktioner har ingen bivirkninger. | En metode kan have mange bivirkninger. |
| Flowstyring udfรธres ved hjรฆlp af funktionskald & funktionskald med rekursion. | Flowkontrolproces udfรธres ved hjรฆlp af loops og betingede erklรฆringer. |
| Udfรธrelsesrรฆkkefรธlgen af โโudsagn er ikke sรฆrlig vigtig. | Udfรธrelsesrรฆkkefรธlgen af โโudsagn er vigtig. |
| Understรธtter bรฅde "Mavemuskler"traction over Dataโ og โAbstraction over adfรฆrd.โ | Understรธtter kun "Mavemuskler"trac"tion over data". |

