- Grunnleggende ideer
- kjennetegn
- Rene funksjoner
- Førsteklasses funksjoner
- Henvisning til åpenhet
- rekursjon
- uforanderlighet
- eksempler
- Imperative og deklarative tilnærminger
- Rene funksjoner
- Funksjoner som førsteklasses objekter
- Fordel
- Kortere og lettere å forstå
- Ingen kontrollstrøm
- ulemper
- applikasjoner
- Funksjonell metodikk
- Språk som støtter funksjonell programmering
- D
- Erlang
- Haskell
- ML
- Mål Caml
- Scheme
- referanser
Den funksjonelle programmeringen tilsvarer mønsterprogrammeringen er basert på konseptet om å oppgi atferden til et program som en funksjonell matematisk modell i stedet for eksplisitte sekvenser av instruksjoner til en prosessor, som er hovedbegrepet i imperativ programmering.
Funksjonelt språk vektlegger utsagn og begreper i stedet for å utføre utsagn. I denne programmeringen vil resultatet bare avhenge av parametrene som sendes til en funksjon, i motsetning til andre typer som overholder en lokal eller global tilstand.
Diagram over hvordan kartleggingsfunksjonen fungerer i Haskell funksjonelle programmeringsspråk. Kilde: Av Pluke - Eget arbeid, CC0 commons.wikimedia.org.
Navnet kommer fra de matematiske funksjonene, som er tildelingen av et sett med innganger til et sett med utganger. En matematisk funksjon gjør egentlig ikke noe arbeid, men beskriver heller modellen for en prosess, og forklarer ved hjelp av en formel hva et sett med innganger produserer i en funksjon.
Grunnleggende ideer
Grunnlaget som funksjonell programmering var basert på var lambda-beregningen, som ble utviklet i løpet av det tredje tiåret av 1900-tallet for å definere og anvende funksjoner. LISP var det første programmeringsspråket i sitt slag, designet i 1960.
Selv om de fleste programmeringsspråk består av innganger, utganger og eksterne variabler som kan settes eller brukes fra funksjoner, unngår funksjonell programmering dette. Tanken er at hver gang en funksjon kalles med de samme parametrene, skal den returnere den samme verdien.
kjennetegn
Funksjonelle programmeringsspråk kalles applikasjoner, fordi funksjonene brukes på deres parametere, så vel som deklarative og ikke-prosessuelle, siden definisjonene spesifiserer hva som skal beregnes og ikke hvordan det skal beregnes.
Rene funksjoner
En funksjon er ren når den ikke har observerbare bivirkninger, for eksempel å endre eksterne variabler, filsystemendringer og så videre.
Disse funksjonene anses som overbevisende, ettersom de ikke uttrykkelig vil endre noen variabler som andre deler av koden kan være avhengig av på et tidspunkt. Det virker vanskelig å kode med disse begrensningene, men disse funksjonene bør betraktes som deterministiske, forutsigbare og komponerbare.
Førsteklasses funksjoner
Funksjoner anses som verdier som kan tilordnes variabler, slik at de kan sendes til og returneres fra andre funksjoner. Det vil si at en funksjon kan brukes som om det var en parameter eller som en verdi som blir returnert.
Dette innebærer at funksjonen kan bestås som sådan, i stedet for bare resultatet av funksjonen. Tenk for eksempel på dobbel (x) -funksjonen, som returnerer dobbelt verdien av inngangsparameteren. Dermed ville dobbelt (2) returnert 4.
Siden det er en førsteklasses funksjon, vil koden (dobbel (dobbel (2)) være den samme som den doble koden (4). Dette lar deg hekke en funksjon som en parameter for en annen, og så videre.
Henvisning til åpenhet
Det refererer til det faktum at i dette programmeringsmønsteret er det ingen oppgaveutsagn. Det vil si at du må definere nye variabler hvis du vil lagre tilleggsverdier. Derfor er tilstanden til en variabel til enhver tid konstant.
Dette eliminerer den minste muligheten for uønskede effekter, fordi enhver variabel kan erstattes av dens virkelige verdi under et hvilket som helst punkt for utførelse av programmet.
rekursjon
I funksjonell programmering er det ingen "for" og "while" -løkker. I stedet er iterasjonen avhengig av rekursjon. Rekursjon implementeres ved hjelp av rekursive funksjoner, som kaller seg repeterende til basissaken er nådd.
uforanderlighet
Variabler er uforanderlige, det vil si at det ikke er mulig å endre en variabel når den først er initialisert. Selv om du kan opprette en ny variabel, er det ikke tillatt å endre eksisterende variabler.
eksempler
Imperative og deklarative tilnærminger
Med et eksempel kan du analysere forskjellen mellom disse tilnærmingene, utføre samme operasjon i begge arrangementene, som er å filtrere oddetallene fra en liste, mens du erstatter 5 med jevnstall mindre enn 5.
Det er samme beregning, med samme resultat. Imidlertid, som du kan se, den obligatoriske koden er fullstendig og ikke umiddelbart klar. På den annen side er den erklærende tilnærmingen lesbar og eksplisitt, fordi den fokuserer på hva du vil få.
Rene funksjoner
Hva som er definert som rene og uren funksjoner kan avklares med noen grunnleggende eksempler:
Funksjoner som førsteklasses objekter
Det betyr å bruke funksjoner på samme måte som data brukes. Derfor kan de føres som parametere til en annen funksjon. I det følgende eksemplet kan int-funksjonen sendes som en parameter til kartfunksjonen:
>>> liste (kart (int,))
De kan tilordnes variabler og returneres. For eksempel kan du i følgende kode tilordne funksjonen hello_world og deretter utføre variabelen som en funksjon.
Fordel
- Fokuser på hva du vil oppnå (erklærende) og ikke på hvordan du skal oppnå det (imperativ).
- De inneholder ikke tildelingsuttalelser, så etter at variabler er gitt en verdi, vil de ikke lenger endre seg. Derfor inneholder ikke de funksjonelle programmene noen bivirkninger.
- Den logiske flyten er klar, siden staten er mindre spredt og ikke implisitt modifisert.
- Støtter konseptet lat evaluering, som betyr at verdien bare evalueres og lagres når det er nødvendig.
- Siden rene funksjoner ikke endrer noen tilstand og er helt avhengige av innspill, er de enkle å forstå. Returverdien gitt av slike funksjoner er den samme som resultatet produsert av dem.
- På grunn av arten av de rene funksjonene for å unngå at variablene eller eksterne data endres, blir implementeringen av samtiden effektiv.
- Funksjoner behandles som verdier og overføres til andre funksjoner som parametere. Dette forbedrer kodenes forståelse og lesbarhet.
- Rene funksjoner tar parametrene en gang, og gir uforanderlig utgang. Bruk av uforanderlige verdier gjør feilsøking og testing enklere.
Kortere og lettere å forstå
De er kortere og lettere å forstå enn imperativer. Studier har vist at den gjennomsnittlige programmererens produktivitet i form av kodelinjer er mer eller mindre den samme for ethvert programmeringsspråk, noe som oversetter til høyere produktivitet.
Ingen kontrollstrøm
Å ringe en funksjon kan ikke ha en annen effekt enn beregningen av resultatet. Dette utelukker en viktig kilde til feil, og gjør også utførelsesrekkefølgen uten betydning, siden ingen bivirkninger kan endre verdien av et uttrykk, og det kan evalueres når som helst.
Programmereren er lettet fra byrden ved å etablere en flyt av kontroll. Siden uttrykk kan evalueres når som helst, kan variabler erstattes av verdiene deres.
Denne autonomien gjør funksjonelle programmer mer matematisk håndterbare enn konvensjonelle programmer.
ulemper
- Det funksjonelle programmeringsparadigmet er ikke enkelt, så det er vanskelig for en nybegynner å forstå.
- Det er vanskelig å vedlikeholde, da mange objekter utvikler seg under koding.
- I noen tilfeller forårsaker å skrive rene funksjoner en reduksjon i lesbarheten til koden.
- Uforanderlige verdier i kombinasjon med rekursjon kan føre til en drastisk reduksjon i systemytelsen.
- Gjenbruk er veldig komplisert og krever konstant refactoring.
- Å skrive programmer i en rekursiv stil i stedet for å bruke løkker eller løkker kan være en veldig skremmende oppgave.
- Objektene representerer kanskje ikke riktig.
- Selv om det å skrive rene funksjoner viser seg å være enkelt, er det ganske vanskelig å kombinere dem med resten av applikasjonen og med input / output-operasjoner
applikasjoner
Kunstig intelligens programmering gjøres i funksjonelle programmeringsspråk og kunstig intelligens teknikker migrerer til virkelige applikasjoner.
Det utmerker seg også i implementeringen av komplekse matematiske modeller. Av denne grunn har en av hovedbrukene av funksjonelle språk tradisjonelt vært akademisk. Det er nyttig for å utvikle kjørbare spesifikasjoner og prototype implementeringer.
Mange funksjonelle språk utmerker seg også ved å implementere parallell behandling. Dette skyldes dens evne til å dra nytte av rene funksjoner, som alltid returnerer den samme verdien uavhengig av rekkefølgen de utføres.
Funksjonell metodikk
WhatsApp bruker Erlang-programmeringsspråket, som følger den funksjonelle programmeringsmodellen, og lar dermed mer enn hundre av de ansatte håndtere dataene som tilhører rundt 1,6 milliarder mennesker.
En annen viktig bærer av den funksjonelle programmeringsstilen er Haskell. Det brukes av Facebook i antispam-systemet. Til og med JavaScript, et av de mest brukte programmeringsspråkene, flairer egenskapene til et dynamisk typisk funksjonsspråk.
Språk som støtter funksjonell programmering
D
Den ble designet etter C ++, og fikk alle fordelene mens den eliminerer de observerte svakhetene ved å måtte være kompatible med C.
Erlang
Det er svært skalerbart og samtidig, og gjør det ideelt for telekommunikasjon og andre applikasjoner som mottar enorme datamengder i en uforutsigbar rekkefølge.
Haskell
Dette er et rent funksjonelt programmeringsspråk, som bruker Lambda calculus.
ML
Det brukes i matematiske, vitenskapelige, økonomiske, analytiske og andre applikasjoner. En av styrkene er å lage programvare for å håndtere andre programmer.
Mål Caml
Det er et åpen kildespråk som er basert på Caml. Det har en tendens til å lage veldig lette programmer, som hjelper dem å laste og løpe raskere enn de som er laget av andre språk.
Scheme
Den er basert på LISP-syntaks og ALGOL-strukturen. På grunn av sin enkelhet brukes den i mange datavitenskapskurs som en introduksjon til programdesign for å vise noen av de grunnleggende elementene i dataprogrammering.
referanser
- Hvem er vert for dette (2019). Lær funksjonell programmering: Denne stilen med koding vil blåse tankene dine. Hentet fra: whoishostingthis.com.
- Andrea Bertoli (2019). En adekvat introduksjon til funksjonell programmering. Hentet fra: dev.to.
- Hacker Earth (2020). Funksjonell programmering. Hentet fra: hackerearth.com.
- Clojure (2020). Funksjonell programmering. Hentet fra: clojure.org.
- Akhil Bhadwal (2020). Funksjonell programmering: konsepter, fordeler, ulemper og applikasjoner. Hack. Hentet fra: hackr.io.
- Guru99 (2020). Hva er funksjonell programmering? Opplæring med eksempel. Hentet fra: guru99.com.