Hva er funksjonell programmering? Opplæring med eksempel
Hva er funksjonell programmering?
Funksjonell programmering (også kalt FP) er en måte å tenke programvarekonstruksjon på ved å lage rene funksjoner. Den unngår begreper om delt tilstand, mutable data observert i objektorientert programmering.
Funksjonelle språk legger vekt på uttrykk og deklarasjoner snarere enn utførelse av utsagn. Derfor, i motsetning til andre prosedyrer som avhenger av en lokal eller global tilstand, avhenger verdiutgang i FP bare av argumentene som sendes til funksjonen.
Kjennetegn ved funksjonell programmering
- Funksjonell programmeringsmetode fokuserer på resultater, ikke prosessen
- Det legges vekt på hva som skal beregnes
- Data er uforanderlige
- Funksjonell programmering Dekomponer 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 loop-setninger og betingede uttalelser som If-Else
Historie om funksjonell programmering
- Grunnlaget for funksjonell programmering er Lambda Calculus. Den ble utviklet på 1930-tallet for funksjonell applikasjon, definisjon og rekursjon
- LISP var det første funksjonelle programmeringsspråket. McCarthy designet den i 1960
- På slutten av 70-tallet definerte forskere ved University of Edinburgh ML(Meta Language)
- På begynnelsen av 80-tallet legger Hope-språket til algebraiske datatyper for rekursjon og likningsresonnement
- I år 2004 Innovasjon av funksjonelt språk 'Scala.'
Funksjonelle programmeringsspråk
Målet med ethvert FP-språk er å etterligne de matematiske funksjonene. 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 de som allerede eksisterer.
Referensiell åpenhet
Funksjonelle programmer skal utføre operasjoner akkurat som om det var for første gang. Så du vil vite hva som kan ha skjedd eller ikke har skjedd under programmets kjøring, og dets bivirkninger. I FP-term kalles det Referensiell åpenhet.
modularitet
Modulær design øker produktiviteten. Små moduler kan kodes raskt og har større sjanse for gjenbruk som sikkert fører til raskere utvikling av programmer. Bortsett fra det, kan modulene testes separat, noe som hjelper deg med å redusere tiden brukt på enhetstesting og feilsøking.
vedlikeholdbarhet
Vedlikehold er et enkelt begrep som betyr at FP-programmering er enklere å vedlikeholde, siden du ikke trenger å bekymre deg for å endre noe utenfor den gitte funksjonen ved et uhell.
Førsteklasses funksjon
'Førsteklasses funksjon' er en definisjon som tilskrives programmeringsspråklige enheter som ikke har noen begrensning på bruken. Derfor kan førsteklasses funksjoner vises hvor som helst i programmet.
Closure
Lukkingen er en indre funksjon som kan få tilgang til variabler for overordnede funksjoner, selv etter at overordnede funksjoner 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 delvis bruk eller karring. Denne teknikken bruker en funksjon på argumentene ett om gangen, ettersom hver applikasjon returnerer en ny funksjon som godtar 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 virker på sine parametere. Det er ikke effektivt hvis du ikke returnerer noe. Dessuten tilbyr den samme utgang for de gitte parameterne
Eksempel:
Function Pure(a,b) { return a+b; }
Urene funksjoner
Uren fungerer akkurat i det motsatte av ren. De har skjulte innganger eller utganger; det kalles uren. Urene funksjoner kan ikke brukes eller testes isolert da 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
Delte tilstander er et viktig konsept i OOP-programmering. I utgangspunktet legger det til egenskaper til objekter. For eksempel, hvis en harddisk er et objekt, kan lagringskapasitet og diskstørrelse legges til som egenskaper.
Bivirkninger
Bivirkninger er alle tilstandsendringer som skjer 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-kode.
- Parallell behandling og samtidighet
- Hot code distribusjon og feiltoleranse
- Tilbyr bedre modularitet med en kortere kode
- Økt produktivitet hos utvikleren
- Støtter nestede funksjoner
- Funksjonelle konstruksjoner som Lazy Map & Lists, etc.
- Tillater effektiv bruk av Lambda Calculus
Begrensninger ved funksjonell programmering
- Funksjonelt programmeringsparadigme er ikke lett, så det er vanskelig å forstå for nybegynnere
- Vanskelig å vedlikeholde da mange objekter utvikler seg under kodingen
- Trenger mye hån og omfattende miljøoppsett
- Gjenbruk er svært komplisert og må hele tiden refaktoreres
- Objekter representerer kanskje ikke problemet riktig
Funksjonell programmering vs. objektorientert programmering
Funksjonell programmering | OOP |
---|---|
FP bruker uforanderlige data. | OOP bruker Mutable data. |
Følger deklarativ programmeringsbasert modell. | Følger imperativ programmeringsmodell. |
Det den fokuserer på er: «Hva du gjør. i programmet." | Det den fokuserer på er "Hvordan du gjør programmeringen." |
Støtter parallell programmering. | Ingen støtte for parallell programmering. |
Dens funksjoner har ingen bivirkninger. | Metoden 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 "abstraksjon over data" og "abstraksjon over atferd." | Støtter bare "abstraksjon over data". |
konklusjonen
- Funksjonell programmering eller FP er en måte å tenke på programvarekonstruksjon basert på noen grunnleggende definerende prinsipper
- Funksjonelle programmeringskonsepter fokuserer på resultater, ikke prosessen
- Målet med ethvert FP-språk er å etterligne de matematiske funksjonene
- Noen mest fremtredende funksjonelle programmeringsspråk: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- En 'ren funksjon' er en funksjon hvis innganger er deklarert som innganger og ingen av dem skal skjules. Utgangene er også deklarert som utganger.
- Uforanderlige data betyr at du enkelt skal kunne lage datastrukturer i stedet for å endre de som allerede eksisterer
- Lar deg unngå forvirrende problemer og feil i koden
- Funksjonell kode er ikke lett, så det er vanskelig å forstå for nybegynnere
- FP bruker Immutable data mens OOP bruker Mutable data