Hvad er funktionel programmering? Tutorial med eksempel
Hvad er funktionel programmering?
Funktionel programmering (ogsรฅ kaldet FP) er en mรฅde at tรฆnke softwarekonstruktion pรฅ ved at skabe rene funktioner. Det undgรฅr koncepter om delt tilstand, mutable data observeret i objektorienteret programmering.
Funktionelle sprog lรฆgger vรฆgt pรฅ udtryk og erklรฆringer frem for udfรธrelsen af โโudsagn. Derfor, i modsรฆtning til andre procedurer, der afhรฆnger af en lokal eller global tilstand, afhรฆnger vรฆrdioutput i FP kun af de argumenter, der sendes til funktionen.
Karakteristika for funktionel programmering
- Funktionel programmeringsmetode fokuserer pรฅ resultater, ikke processen
- Der lรฆgges vรฆgt pรฅ, hvad der skal beregnes
- Data er uforanderlige
- Funktionel programmering Dekomponรฉr problemet i 'funktioner
- Det er bygget pรฅ begrebet matematiske funktioner, som bruger betingede udtryk og rekursion til at udfรธre beregningen
- Det understรธtter ikke iteration som loop-sรฆtninger og betingede sรฆtninger som If-Else
Historien om funktionel programmering
- Grundlaget for funktionel programmering er Lambda Calculus. Det blev udviklet i 1930'erne til den funktionelle 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 Language)
- I begyndelsen af โโ80'erne tilfรธjede Hope-sprog algebraiske datatyper til rekursion og ligningsrรฆsonnement
- I รฅr 2004 Innovation af funktionelt sprog 'Scala.'
Funktionelle programmeringssprog
Formรฅlet med ethvert FP-sprog er at efterligne de matematiske funktioner. Imidlertid er den grundlรฆggende beregningsproces 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 dem, der allerede eksisterer.
Referencegennemsigtighed
Funktionelle programmer skal udfรธre operationer, som om det var for fรธrste gang. Sรฅ du vil vide, hvad der kan vรฆre sket eller ikke er sket under programmets udfรธrelse, og dets bivirkninger. I FP-term kaldes det 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 udvikling af programmer. Ud over det kan modulerne testes separat, hvilket hjรฆlper dig med at reducere den tid, der bruges pรฅ enhedstest og fejlfinding.
Maintainability
Vedligeholdelse er et simpelt udtryk, hvilket betyder, at FP-programmering er nemmere 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รธrsteklasses funktion' er en definition, der tilskrives programmeringssprogsenheder, der ikke har nogen begrรฆnsning pรฅ deres brug. Derfor kan fรธrsteklasses funktioner dukke op overalt i programmet.
Lukning
Lukningen er en indre funktion, som kan fรฅ adgang til variabler af overordnede funktioner, 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 applikationer eller currying. Denne teknik anvender en funktion til sine argumenter et ad gangen, da hver applikation returnerer en ny funktion, som 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 virker pรฅ deres parametre. Det er ikke effektivt, hvis man ikke returnerer noget. Desuden giver det samme output for de givne parametre
Eksempel:
Function Pure(a,b)
{
return a+b;
}
Urene funktioner
Uren fungerer prรฆcis i det modsatte af ren. De har skjulte input eller output; det kaldes uren. 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
Delte tilstande er et vigtigt koncept i OOP-programmering. Grundlรฆggende er det at tilfรธje egenskaber til objekter. For eksempel, hvis en harddisk 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
- Lettere at teste og udfรธre enhedstest og fejlfinde FP-kode.
- Parallel behandling og samtidighed
- Hot code-implementering og fejltolerance
- Tilbyder bedre modularitet med en kortere kode
- รget produktivitet hos udvikleren
- Understรธtter indlejrede funktioner
- Funktionelle konstruktioner som Lazy Map & Lists osv.
- Tillader effektiv brug af Lambda Calculus
Begrรฆnsninger ved funktionel programmering
- Funktionelt programmeringsparadigme er ikke let, sรฅ det er svรฆrt at forstรฅ for begynderen
- Svรฆrt at vedligeholde, da mange objekter udvikler sig under kodningen
- Krรฆver masser af hรฅn og omfattende miljรธopsรฆtning
- Genbrug er meget kompliceret og skal konstant omstruktureres
- 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 deklarativ programmeringsbaseret model. | Fรธlger imperativ programmeringsmodel. |
| Det, den fokuserer pรฅ, er: "Det, 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. | Metoden kan give 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 "abstraktion over data" og "abstraktion over adfรฆrd." | Understรธtter kun "Abstraktion over data". |
Konklusion
- Funktionel programmering eller FP er en mรฅde at tรฆnke softwarekonstruktion pรฅ baseret pรฅ nogle grundlรฆggende definerende principper
- Funktionelle programmeringskoncepter fokuserer pรฅ resultater, ikke pรฅ processen
- Formรฅlet med ethvert FP-sprog er at efterligne de matematiske funktioner
- Nogle mest fremtrรฆdende funktionelle programmeringssprog: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- 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.
- Uforanderlige data betyder, at du nemt skal kunne oprette datastrukturer i stedet for at รฆndre dem, der allerede eksisterer
- Giver dig mulighed for at undgรฅ forvirrende problemer og fejl i koden
- Funktionel kode er ikke let, sรฅ det er svรฆrt at forstรฅ for begynderen
- FP bruger uforanderlige data, mens OOP bruger foranderlige data

