Det funktionel programmering svarer til programmeringsmønsteret, der er baseret på konceptet om at angive proceduren for et program som en matematisk funktionel model snarere end som eksplicitte sekvenser af instruktioner til en processor, som er hovedbegrebet i tvingende programmering.
Funktionelt sprog fremhæver udsagn og udtryk i stedet for at udføre udsagn. I denne programmering afhænger resultatet kun af de parametre, der sendes til en funktion, i modsætning til andre typer, der adlyder en lokal eller global tilstand.
Dets navn kommer fra de matematiske funktioner, som er tildelingen af et sæt input til et sæt output. En matematisk funktion udfører egentlig ikke noget arbejde, men beskriver modellen for en proces og forklarer ved hjælp af en formel, hvad et sæt input producerer i en funktion.
Artikelindeks
Grundlaget, som funktionel programmering var baseret på, var lambda-calculus, som blev udviklet i det tredje årti af det 20. århundrede for at definere og anvende funktioner. LISP var det første programmeringssprog af sin art, designet i 1960.
Selvom de fleste programmeringssprog består af input, output og eksterne variabler, der kan indstilles eller bruges inden for funktioner, undgår funktionel programmering dette. Ideen er, at hver gang en funktion kaldes med de samme parametre, skal den returnere den samme værdi.
Funktionelle programmeringssprog kaldes applikationer, fordi funktionerne anvendes til deres parametre såvel som deklarative og ikke-proceduremæssige, da definitionerne angiver, hvad der skal beregnes, og ikke hvordan det beregnes.
En funktion er ren, når den ikke har nogen observerbare bivirkninger, såsom ændring af eksterne variabler, ændringer i filsystemet osv..
Disse funktioner betragtes som overbevisende, da de ikke udtrykkeligt ændrer nogen variabler, som andre dele af koden kan være afhængige af på et eller andet tidspunkt. Det ser ud til at være akavet at kode med disse begrænsninger, men disse funktioner skal betragtes som deterministiske, forudsigelige og sammensættelige..
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 overføres som sådan, snarere end blot resultatet af funktionen. Overvej f.eks. Den dobbelte (x) funktion, som returnerer dobbelt så meget som dens inputparameter. Således ville dobbelt (2) returnere 4.
Da det er en førsteklasses funktion, vil (dobbelt (dobbelt (2)) koden være den samme som den dobbelte (4) kode. Dette giver dig mulighed for at rede en funktion som en parameter for en anden osv..
Det refererer til det faktum, at der i dette programmeringsmønster ikke er nogen opgørelseserklæringer. Det vil sige, at der skal defineres nye variabler, hvis du vil gemme yderligere værdier. Derfor er en variabels 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 ethvert program til gennemførelse af programmet..
I funktionel programmering er der ingen "for" og "while" sløjfer. I stedet er iteration afhængig af rekursion. Rekursion implementeres ved hjælp af rekursive funktioner, som kalder sig gentagne gange, indtil basissagen er nået.
Variabler er uforanderlige, det vil sige, det er ikke muligt at ændre en variabel, når den først er initialiseret. Selvom en ny variabel kan oprettes, er det ikke tilladt at ændre eksisterende variabler.
Med et eksempel kan du analysere forskellen mellem disse tilgange ved at udføre den samme operation i begge arrangementer, hvilket er at filtrere de ulige tal 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 tvingende kode imidlertid detaljeret og ikke umiddelbart klar. På den anden side er den deklarative tilgang læsbar og eksplicit, fordi den fokuserer på, hvad du vil få.
Hvad der defineres som rene og urene funktioner kan afklares med nogle grundlæggende eksempler:
Det betyder at bruge funktioner på samme måde som data bruges. Derfor kan de videregives som parametre til en anden funktion. I det følgende eksempel kan int-funktionen overføres som en parameter til kortfunktionen:
>>> liste (kort (int, ["1", "2", "3"]))
[1, 2, 3]
De kan tildeles variabler og returneres. For eksempel kan du i den følgende kode tildele funktionen hello_world og derefter udføre variablen som en funktion.
- Fokuser på, hvad du vil opnå (erklærende) og ikke på, hvordan du opnår det (bydende nødvendigt).
- De indeholder ikke tildelingserklæringer, så efter at variabler får en værdi, ændres de ikke længere. Derfor indeholder funktionelle programmer ikke 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 gemmes, når det er nødvendigt.
- Da rene funktioner ikke ændrer nogen tilstand og er helt afhængige af input, er de nemme at forstå. Returneringsværdien givet af sådanne funktioner er den samme som det resultat, de producerer.
- På grund af arten af de rene funktioner for at undgå, at variablerne eller eventuelle eksterne data ændres, er implementeringen af samtidigheden effektiv.
- Funktioner behandles som værdier, videregives til andre funktioner som parametre. Dette forbedrer forståelsen og læsbarheden af koden..
- Rene funktioner tager parametrene en gang og producerer uforanderlig output. Brug af uforanderlige værdier gør fejlretning og test nemmere.
De er kortere og lettere at forstå end imperativer. Undersøgelser har vist, at den gennemsnitlige programmørproduktivitet i form af kodelinjer er mere eller mindre den samme for ethvert programmeringssprog, hvilket oversættes til højere produktivitet.
Opkald til en funktion kan ikke have en anden effekt end at beregne dens resultat. Dette udelukker en vigtig kilde til fejl, hvilket også gør rækkefølgen af udførelsen irrelevant, da ingen sekundær effekt vil være i stand til at ændre værdien af et udtryk, og det kan evalueres når som helst.
Programmøren er fritaget for byrden ved at etablere en strøm af kontrol. Da udtryk til enhver tid kan evalueres, kan variabler erstattes af deres værdier.
Denne autonomi favoriserer, at funktionelle programmer er mere matematisk håndterbare end konventionelle programmer..
- Det funktionelle programmeringsparadigme er ikke ligetil, hvilket gør det svært for en nybegynder at forstå.
- Det er vanskeligt at vedligeholde, da mange objekter udvikler sig under kodning.
- I nogle tilfælde forårsager skrivning af rene funktioner en reduktion i læsbarheden af koden.
- Uforanderlige værdier i kombination med rekursion kan føre til en drastisk reduktion i systemets ydeevne.
- Genbrug er meget kompliceret og har brug for konstant refactoring.
- Skrivning af programmer i en rekursiv stil i stedet for at bruge sløjfer eller sløjfer kan være en meget skræmmende opgave..
- Objekter repræsenterer muligvis ikke problemet korrekt.
- Selvom det er let at skrive rene funktioner, er det ret vanskeligt at kombinere dem med resten af applikationen og med input / output-operationerne.
Programmering af kunstig intelligens udføres på funktionelle programmeringssprog, og teknikker til kunstig intelligens migrerer til applikationer i den virkelige verden.
Det udmærker sig også ved 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 udvikling af eksekverbare specifikationer og prototype-implementeringer.
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, i hvilken de udføres..
WhatsApp bruger programmeringssproget Erlang, som følger den funktionelle programmeringsmodel og giver således mere end hundrede af sine medarbejdere mulighed for at håndtere data, der tilhører ca. 1,6 milliarder mennesker..
En anden vigtig bærer af den funktionelle programmeringsstil er Haskell. Det bruges af Facebook i dets antispam-system. Selv JavaScript, et af de mest anvendte programmeringssprog, praler med egenskaberne for et dynamisk funktionelt sprog.
Det blev designet efter C ++ og opnåede alle fordelene, samtidig med at det fjernede dens observerede svagheder ved at skulle være kompatibel med C.
Den er meget skalerbar og samtidig, hvilket gør den ideel til telekommunikation og andre applikationer, der modtager enorme mængder data i en uforudsigelig rækkefølge..
Dette er et rent funktionelt programmeringssprog, der bruger Lambda-beregning.
Det bruges i matematiske, videnskabelige, økonomiske, analytiske og andre applikationer. En af dets styrker er at fremstille software til at håndtere andre programmer.
Det er et open source-sprog, der er baseret på Caml. Det har tendens til at skabe meget lette programmer, hvilket hjælper dem med at indlæse og køre hurtigere end dem, der er oprettet af andre sprog.
Den er baseret på LISP-syntaksen og ALGOL-strukturen. På grund af sin enkelhed bruges det i mange datalogikurser som en introduktion til programdesign for at vise nogle af de grundlæggende i computerprogrammering..
Endnu ingen kommentarer