- Grundlæggende ideer
- egenskaber
- Rene funktioner
- Førsteklasses funktioner
- Henvisning til gennemsigtighed
- rekursion
- uforanderlighed
- eksempler
- Imperativ og deklarativ tilgang
- Rene funktioner
- Funktioner som førsteklasses objekter
- Fordel
- Kortere og lettere at forstå
- Ingen kontrolstrøm
- Ulemper
- Applikationer
- Funktionel metode
- Sprog, der understøtter funktionel programmering
- D
- Erlang
- Haskell
- ML
- Mål Caml
- Scheme
- Referencer
Den funktionelle programmering svarer til mønsterprogrammeringen er baseret på begrebet angivelse af et programs opførsel som en funktionel matematisk model snarere end eksplicitte sekvenser af instruktioner til en processor, som er hovedbegrebet i imperativ programmering.
Funktionelt sprog fremhæver udsagn og udtryk snarere end at udføre udsagn. I denne programmering afhænger resultatet kun af de parametre, der overføres til en funktion, i modsætning til andre typer, der overholder en lokal eller global tilstand.
Diagram over, hvordan kortlægningsfunktionen fungerer i Haskell funktionelle programmeringssprog. Kilde: Af Pluke - Eget arbejde, CC0 commons.wikimedia.org.
Navnet kommer fra de matematiske funktioner, som er tildelingen af et sæt input til et sæt output. En matematisk funktion udfører ikke rigtig noget arbejde, men beskriver snarere modellen for en proces og forklarer ved hjælp af en formel, hvad et sæt input producerer i en funktion.
Grundlæggende ideer
Grundlaget, som funktionel programmering var baseret på, var lambda-beregningen, der blev udviklet i løbet af det tredje årti af det 20. århundrede til at definere og anvende funktioner. LISP var det første programmeringssprog i sin art, designet i 1960.
Selvom de fleste programmeringssprog består af input, output og eksterne variabler, der kan indstilles eller bruges fra funktioner, undgår funktionel programmering dette. Tanken er, at hver gang en funktion kaldes med de samme parametre, skal den returnere den samme værdi.
egenskaber
Funktionelle programmeringssprog kaldes applikationer, fordi funktionerne anvendes til deres parametre såvel som deklarative og ikke-proceduremæssige, da definitionerne specificerer, hvad der skal beregnes, og ikke hvordan det beregnes.
Rene funktioner
En funktion er ren, når den ikke har observerbare bivirkninger, såsom at ændre eksterne variabler, ændringer i filsystemet og så videre.
Disse funktioner betragtes som overbevisende, da de ikke udtrykkeligt vil ændre nogen variabler, som andre dele af koden muligvis afhænger af på et tidspunkt. Det ser ud til at være ubehageligt at kode med disse begrænsninger, men disse funktioner skal betragtes som deterministiske, forudsigelige og komponerbare.
Førsteklasses funktioner
Funktioner betragtes som værdier, der kan tildeles variabler, så de kan overføres til og returneres fra andre funktioner. Det vil sige, en funktion kan bruges som om det var en parameter eller som en værdi, der returneres.
Dette indebærer, at funktionen kan videregives som sådan, snarere end kun resultatet af funktionen. Overvej for eksempel den dobbelte (x) -funktion, der returnerer dobbelt værdien af dens inputparameter. Således ville dobbelt (2) returnere 4.
Da det er en førsteklasses funktion, vil koden (dobbelt (dobbelt (2)) være den samme som dobbeltkoden (4). Dette giver dig mulighed for at indlejre en funktion som en parameter for en anden, og så videre.
Henvisning til gennemsigtighed
Det henviser til det faktum, at der i dette programmeringsmønster ikke findes nogen tildelingsangivelser. Det vil sige, du skal definere nye variabler, hvis du vil gemme yderligere værdier. Derfor er en variables tilstand konstant på alle tidspunkter.
Dette eliminerer den mindste mulighed for uønskede effekter, fordi enhver variabel kan erstattes af dens reelle værdi under et hvilket som helst tidspunkt for udførelse af programmet.
rekursion
I funktionel programmering er der ingen "for" og "while" -sløjfer. I stedet for er iteration afhængig af rekursion. Rekursion implementeres ved hjælp af rekursive funktioner, der kalder sig gentagne gange, indtil basissagen er nået.
uforanderlighed
Variabler er uforanderlige, det vil sige, det er ikke muligt at ændre en variabel, når den først er initialiseret. Selvom du kan oprette en ny variabel, er det ikke tilladt at ændre eksisterende variabler.
eksempler
Imperativ og deklarativ tilgang
Med et eksempel kan du analysere forskellen mellem disse tilgange og udføre den samme handling i begge arrangementer, som er at filtrere de ulige numre fra en liste, mens du erstatter 5 med lige tal mindre end 5.
Det er den samme beregning med det samme resultat. Som du kan se, er den ufravigelige kode dog verbøs og ikke umiddelbart klar. På den anden side er den erklærende tilgang læsbar og eksplicit, fordi den fokuserer på, hvad du vil have.
Rene funktioner
Hvad der defineres som rene og uren funktioner kan klarlægges med nogle grundlæggende eksempler:
Funktioner som førsteklasses objekter
Det betyder at bruge funktioner på samme måde som data bruges. Derfor kan de overføres som parametre til en anden funktion. I det følgende eksempel kan int-funktionen sendes som en parameter til kortfunktionen:
>>> liste (kort (int,))
De kan tildeles variabler og returneres. For eksempel kan du i følgende kode tildele funktionen hello_world og derefter udføre variablen som en funktion.
Fordel
- Fokuser på, hvad du vil opnå (erklærende) og ikke på, hvordan du opnår det (imperativ).
- De indeholder ikke tildelingsangivelser, så når variabler har fået en værdi, ændres de ikke længere. Derfor indeholder de funktionelle programmer ingen bivirkninger.
- Den logiske strømning er klar, da staten er mindre spredt og ikke implicit ændres.
- Understøtter begrebet doven evaluering, hvilket betyder, at værdien kun evalueres og opbevares, når det er nødvendigt.
- Da rene funktioner ikke ændrer nogen tilstand og er helt afhængige af input, er de lette at forstå. Returværdien, der er givet ved sådanne funktioner, er den samme som det resultat, der er produceret af dem.
- På grund af arten af de rene funktioner for at undgå, at variablerne eller eksterne data ændres, bliver implementeringen af samtiden effektiv.
- Funktioner behandles som værdier og overføres til andre funktioner som parametre. Dette forbedrer forståelsen og læsbarheden af koden.
- Rene funktioner tager parametrene én gang og producerer uforanderlig output. Brug af uændrede værdier gør debugging og test lettere.
Kortere og lettere at forstå
De er kortere og lettere at forstå end imperativer. Undersøgelser har vist, at den gennemsnitlige programmeringsproduktivitet med hensyn til kodelinjer er mere eller mindre den samme for ethvert programmeringssprog, hvilket resulterer i højere produktivitet.
Ingen kontrolstrøm
Opkald til en funktion kan ikke have en anden effekt end beregningen af dens resultat. Dette udelukker en vigtig kilde til fejl, hvilket også gør rækkefølgen af udførelse irrelevant, da ingen bivirkninger kan ændre værdien af et udtryk, og det kan evalueres på ethvert tidspunkt.
Programmereren er lettet for byrden ved at etablere en strøm af kontrol. Da udtryk kan evalueres til enhver tid, kan variabler erstattes af deres værdier.
Denne autonomi gør funktionelle programmer mere matematiske at håndtere end konventionelle programmer.
Ulemper
- Det funktionelle programmeringsparadigme er ikke enkelt, så det er vanskeligt for en nybegynder at forstå.
- Det er vanskeligt at vedligeholde, da mange objekter udvikler sig under kodning.
- I nogle tilfælde medfører skrivning af rene funktioner en reduktion i kodens læsbarhed.
- Uændelige værdier i kombination med rekursion kan føre til en drastisk reduktion i systemets ydelse.
- Genbrug er meget kompliceret og kræver konstant refactoring.
- At skrive programmer i en rekursiv stil i stedet for at bruge loops eller loops kan være en meget skræmmende opgave.
- Objekterne repræsenterer muligvis ikke korrekt.
- Selvom det at skrive rene funktioner viser sig at være enkelt, er det ganske vanskeligt at kombinere dem med resten af applikationen og med input / output-operationerne
Applikationer
Kunstig intelligens programmering udføres på funktionelle programmeringssprog, og kunstig intelligens teknikker migrerer til applikationer i den virkelige verden.
Det udmærker sig også i implementeringen af komplekse matematiske modeller. Af denne grund har en af de vigtigste anvendelser af funktionelle sprog traditionelt været akademisk. Det er nyttigt til at udvikle eksekverbare specifikationer og prototypeimplementeringer.
Mange funktionelle sprog udmærker sig også ved implementering af parallel behandling. Dette skyldes dets evne til at drage fordel af rene funktioner, som altid returnerer den samme værdi uanset rækkefølgen, de udføres i.
Funktionel metode
WhatsApp bruger Erlang-programmeringssprog, der følger den funktionelle programmeringsmodel, hvilket gør det muligt for mere end hundrede af dets medarbejdere at håndtere de data, der tilhører omkring 1,6 milliarder mennesker.
En anden vigtig bærer af den funktionelle programmeringsstil er Haskell. Det bruges af Facebook i sit antispam-system. Selv JavaScript, et af de mest anvendte programmeringssprog, flaunter egenskaberne for et dynamisk typisk funktionssprog.
Sprog, der understøtter funktionel programmering
D
Det blev designet efter C ++ og fik alle sine fordele, samtidig med at de observerede svagheder ved at være kompatible med C.
Erlang
Det er meget skalerbart og samtidigt, hvilket gør det ideelt til telekommunikation og andre applikationer, der modtager store mængder data i en uforudsigelig rækkefølge.
Haskell
Dette er et rent funktionelt programmeringssprog, der bruger Lambda-beregningen.
ML
Det bruges i matematiske, videnskabelige, økonomiske, analytiske og andre applikationer. En af dens styrker er at fremstille software til at håndtere andre programmer.
Mål Caml
Det er et open source sprog, der er baseret på Caml. Det har en tendens til at oprette meget lette programmer, hvilket hjælper dem med at indlæse og køre hurtigere end dem, der er oprettet af andre sprog.
Scheme
Det er baseret på LISP-syntaks og ALGOL-strukturen. På grund af dens enkelhed bruges det i mange datalogikkurser som en introduktion til programdesign for at vise nogle af de grundlæggende elementer i computerprogrammering.
Referencer
- Hvem er vært for dette (2019). Lær funktionel programmering: Denne kodningstilstand sprænger dit sind. Taget fra: whoishostingthis.com.
- Andrea Bertoli (2019). En passende introduktion til funktionel programmering. Taget fra: dev.to.
- Hacker Earth (2020). Funktionel programmering. Taget fra: hackerearth.com.
- Clojure (2020). Funktionel programmering. Taget fra: clojure.org.
- Akhil Bhadwal (2020). Funktionel programmering: koncepter, fordele, ulemper og applikationer. Hack. Taget fra: hackr.io.
- Guru99 (2020). Hvad er funktionel programmering? Vejledning med eksempel. Taget fra: guru99.com.