Hva er funksjonell programmering?
โก Smart oppsummering
Funksjonell programmering er en mรฅte รฅ bygge programvare pรฅ ved รฅ sette sammen rene funksjoner, unngรฅ delt tilstand og muterbare data. Den vektlegger uttrykk fremfor setninger, slik at en funksjons utdata bare avhenger av dens inndata, noe som gjรธr programmer forutsigbare og testbare.

Hva er funksjonell programmering?
Funksjonell programmering (ogsรฅ kalt FP) er en mรฅte รฅ tenke pรฅ programvarekonstruksjon ved รฅ lage rene funksjoner. Den unngรฅr konseptene om delt tilstand og muterbare data som observeres i objektorientert programmering.
Funksjonelle sprรฅk vektlegger uttrykk og deklarasjoner snarere enn utfรธrelse av setninger. Derfor, i motsetning til andre prosedyrer som er avhengige av en lokal eller global tilstand, avhenger verdiutgangen i FP bare av argumentene som sendes til funksjonen.
Kjennetegn ved funksjonell programmering
- Funksjonell programmering fokuserer pรฅ resultater, ikke prosessen.
- Det er lagt vekt pรฅ hva som skal beregnes.
- Data er uforanderlige.
- Funksjonell programmering deler opp problemet i funksjoner.
- Den er bygget pรฅ konseptet med matematiske funksjoner som bruker betingede uttrykk og rekursjon for รฅ utfรธre beregningen.
- Den stรธtter ikke iterasjon som lรธkkesetninger og betingede utsagn som If-Else.
Historie om funksjonell programmering
- Grunnlaget for funksjonell programmering er lambdakalkulus. Den ble utviklet pรฅ 1930-tallet for funksjonell anvendelse, definisjon og rekursjon.
- LISP var det fรธrste funksjonelle programmeringssprรฅket. McCarthy designet det i 1960.
- Pรฅ slutten av 70-tallet definerte forskere ved Universitetet i Edinburgh ML (metasprรฅk).
- Tidlig pรฅ 80-tallet la Hope-sprรฅket til algebraiske datatyper for rekursjon og ligningsresonnement.
- I 2004 ble funksjonssprรฅket ยซScalaยป utviklet.
Funksjonelle programmeringssprรฅk
Mรฅlet med ethvert FP-sprรฅk er รฅ etterligne matematiske funksjoner. Imidlertid er den grunnleggende beregningsprosessen annerledes i funksjonell programmering.
Her er noen av de mest fremtredende funksjonelle programmeringssprรฅkene:
- Haskell
- SML
- Clojure
- Skala
- erlang
- Rengjรธr
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
Grunnleggende funksjonell programmeringsterminologi og Concepts
Uforanderlige data
Uforanderlige data betyr at du enkelt skal kunne lage datastrukturer i stedet for รฅ endre eksisterende strukturer.
Referensiell รฅpenhet
Funksjonelle programmer bรธr utfรธre operasjoner akkurat som om det var for fรธrste gang. Dermed vet du hva som kan ha skjedd eller ikke skjedd under programmets kjรธring, og hva som kan ha vรฆrt bivirkningene. I FP-termer kalles dette referansetransparens.
modularitet
Modulรฆr design รธker produktiviteten. Smรฅ moduler kan kodes raskt og har stรธrre sjanse for gjenbruk, noe som garantert fรธrer til raskere programutvikling. Bortsett fra det kan modulene testes separat, noe som hjelper deg med รฅ redusere tiden du bruker pรฅ enhetstesting og feilsรธking.
vedlikeholdbarhet
Vedlikeholdbarhet er et enkelt begrep som betyr at FP-programmering er enklere รฅ vedlikeholde, ettersom du ikke trenger รฅ bekymre deg for รฅ ved et uhell endre noe utenfor den gitte funksjonen.
Fรธrsteklasses funksjon
ยซFรธrsteklasses funksjonยป er en definisjon som tilskrives programmeringssprรฅkenheter som ikke har noen begrensninger pรฅ bruken. Derfor kan fรธrsteklasses funksjoner vises hvor som helst i programmet.
Closure
En avslutning er en indre funksjon som kan fรฅ tilgang til variabler i foreldrefunksjonen, selv etter at foreldrefunksjonen er utfรธrt.
Funksjoner av hรธyere orden
Funksjoner av hรธyere orden tar enten andre funksjoner som argumenter eller returnerer dem som resultater.
Funksjoner av hรธyere orden tillater delvise applikasjoner eller currying. Denne teknikken anvender en funksjon pรฅ argumentene รฉn om gangen, der hver applikasjon returnerer en ny funksjon som aksepterer det neste argumentet.
Ren funksjon
En 'ren funksjon' er en funksjon hvis innganger er deklarert som innganger og ingen av dem skal skjules. Utgangene er ogsรฅ deklarert som utganger.
Rene funksjoner reagerer pรฅ parameterne sine. Den er ikke effektiv hvis den ikke returnerer noe. Dessuten tilbyr den samme utdata for de gitte parameterne.
Eksempel:
Function Pure(a,b) { return a+b; }
Urene funksjoner
Urene funksjoner er det stikk motsatte av rene funksjoner. De har skjulte innganger eller utganger, og det er derfor de kalles urene. Urene funksjoner kan ikke brukes eller testes isolert siden de har avhengigheter.
Eksempel
int z; function notPure(){ z = z+10; }
Funksjonssammensetning
Funksjonssammensetning er รฅ kombinere 2 eller flere funksjoner for รฅ lage en ny.
Delte stater
Delt tilstand er et viktig konsept i OOP-programmering. I bunn og grunn handler det om รฅ legge til egenskaper til objekter. Hvis for eksempel en harddisk er et objekt, kan lagringskapasitet og diskstรธrrelse legges til som egenskaper.
Bivirkninger
Bivirkninger er alle tilstandsendringer som oppstรฅr utenfor en kalt funksjon. Det stรธrste mรฅlet med ethvert FP-programmeringssprรฅk er รฅ minimere bivirkninger ved รฅ skille dem fra resten av programvarekoden. I FP-programmering er det viktig รฅ fjerne bivirkninger fra resten av programmeringslogikken.
Fordelene med funksjonell programmering
- Lar deg unngรฅ forvirrende problemer og feil i koden.
- Enklere รฅ teste og utfรธre enhetstesting og feilsรธke FP Code.
- Parallell prosessering og samtidighet.
- Implementering av varm kode og feiltoleranse.
- Tilbyr bedre modularitet med kortere kode.
- รkt produktivitet hos utvikleren.
- Stรธtter nestede funksjoner.
- Funksjonelle konstruksjoner som Lazy Map & Lists, etc.
- Tillater effektiv bruk av lambdakalkulus.
Begrensninger ved funksjonell programmering
- Det funksjonelle programmeringsparadigmet er ikke lett, sรฅ det er vanskelig รฅ forstรฅ for nybegynnere.
- Vanskelig รฅ vedlikeholde ettersom mange objekter utvikler seg under kodingen.
- Trenger mye mobing og omfattende miljรธoppsett.
- Gjenbruk er svรฆrt komplisert og krever konstant refaktorering.
- Objekter representerer kanskje ikke problemet riktig.
Funksjonell programmering vs. objektorientert programmering
| Funksjonell programmering | OOP |
|---|---|
| FP bruker uforanderlige data. | OOP bruker Mutable data. |
| Fรธlger en modell basert pรฅ deklarativ programmering. | Fรธlger en imperativ programmeringsmodell. |
| Det den fokuserer pรฅ er: ยซHva du gjรธr i programmet.ยป | Det den fokuserer pรฅ er: ยซHvordan du programmerer.ยป |
| Stรธtter parallell programmering. | Ingen stรธtte for parallell programmering. |
| Funksjonene har ingen bivirkninger. | En metode kan gi mange bivirkninger. |
| Flytkontroll utfรธres ved bruk av funksjonskall og funksjonskall med rekursjon. | Flytkontrollprosessen utfรธres ved hjelp av loops og betingede uttalelser. |
| Rekkefรธlgen pรฅ utfรธrelse av uttalelser er ikke sรฆrlig viktig. | Rekkefรธlgen pรฅ utfรธrelse av uttalelser er viktig. |
| Stรธtter bรฅde ยซmagemusklerยปtracยซtion over dataยป og ยซAbsยปtracsjon over atferd. | Stรธtter kun ยซMageยปtracยซtion over dataยป. |

