Funksjonelle programmeringsfunksjoner, eksempler, fordeler, ulemper

3316
Anthony Golden
Funksjonelle programmeringsfunksjoner, eksempler, fordeler, ulemper

De funksjonell programmering tilsvarer programmeringsmønsteret som er basert på konseptet med å angi prosedyren for et program som en matematisk funksjonell modell i stedet for som eksplisitte sekvenser av instruksjoner til en prosessor, som er hovedkonseptet i tvingende programmering.

Funksjonelt språk fremhever uttalelser og vilkår i stedet for å utføre uttalelser. I denne programmeringen vil resultatet bare avhenge av parametrene som sendes til en funksjon, i motsetning til andre typer som adlyder en lokal eller global stat..

Diagram over hvordan kartleggingsfunksjonen fungerer i Haskells 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 modellen for en prosess, og forklarer ved hjelp av en formel hva et sett med innganger produserer i en funksjon.

Artikkelindeks

  • 1 Grunnleggende ideer
  • 2 funksjoner
    • 2.1 Rene funksjoner
    • 2.2 Førsteklasses funksjoner
    • 2.3 Referansetransparens
    • 2.4 Rekursjon
    • 2.5 Uforanderlighet
  • 3 eksempler
    • 3.1 Imperative og deklarative tilnærminger
    • 3.2 Rene funksjoner
    • 3.3 Fungerer som førsteklasses objekter
  • 4 Fordeler
    • 4.1 Kortere og lettere å forstå
    • 4.2 Ingen kontrollflyt
  • 5 Ulemper
  • 6 Søknader
    • 6.1 Funksjonell metodikk
    • 6.2 Språk som støtter funksjonell programmering
  • 7 Referanser

Grunnleggende ideer

Grunnlaget som funksjonell programmering var basert på var lambdakalkulus, som ble utviklet i løpet av det tredje tiåret av det 20. århundre for å definere og bruke 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 angis 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å parametrene deres, så vel som deklarative og ikke-prosessuelle, siden definisjonene angir hva som skal beregnes og ikke hvordan det beregnes.

Rene funksjoner

En funksjon er ren når den ikke har noen observerbare bivirkninger, som for eksempel endring av eksterne variabler, endringer i filsystemet, etc..

Disse funksjonene anses å være overbevisende, da de ikke uttrykkelig vil endre noen variabler som andre deler av koden kan være avhengige av på et eller annet tidspunkt. Det virker vanskelig å kode med disse begrensningene, men disse funksjonene bør betraktes som deterministiske, forutsigbare og komponerbare..

Førsteklasses funksjoner

Funksjoner betraktes som verdier som kan tilordnes variabler, slik at de kan overføres 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 returneres.

Dette innebærer at funksjonen kan overføres som sådan, i stedet for bare resultatet av funksjonen. Tenk for eksempel på den doble (x) funksjonen, som returnerer to ganger verdien av inngangsparameteren. Dermed ville dobbelt (2) returnere 4.

Siden det er en førsteklasses funksjon, vil (dobbel (dobbel (2)) koden være den samme som den doble (4) koden. Dette lar deg hekke en funksjon som en parameter for en annen og så videre.

Referansetransparens

Det refererer til det faktum at det i dette programmeringsmønsteret ikke er oppgaveanmeldelser. Det vil si at nye variabler må defineres hvis du vil lagre tilleggsverdier. Derfor er tilstanden til en variabel konstant til enhver tid.

Dette eliminerer den minste muligheten for uønskede effekter, fordi enhver variabel kan erstattes av dens reelle verdi under ethvert program for gjennomføring..

Rekursjon

I funksjonell programmering er det ingen "for" og "while" -løkker. I stedet er iterasjon avhengig av rekursjon. Rekursjon er implementert ved hjelp av rekursive funksjoner, som kaller seg gjentatte ganger til basissaken er nådd.

Uforanderlighet

Variabler er uforanderlige, det vil si at det ikke er mulig å endre en variabel når den er initialisert. Selv om en ny variabel kan opprettes, er det ikke tillatt å endre eksisterende variabler.

Eksempler

Imperative og deklarative tilnærminger

Med et eksempel kan du analysere forskjellen mellom disse tilnærmingene, og utføre den samme operasjonen i begge ordningene, som er å filtrere oddetallene fra en liste mens du erstatter 5 med partall mindre enn 5.

Det er samme beregning, med samme resultat. Som du kan se, er den tvingende koden imidlertid omfattende og ikke umiddelbart klar. På den annen side er den deklarative tilnærmingen lesbar og eksplisitt, fordi den fokuserer på hva du vil få.

Rene funksjoner

Hva som er definert som rene og urene funksjoner, kan avklares med noen grunnleggende eksempler:

Fungerer som førsteklasses objekter

Det betyr å bruke funksjoner på samme måte som data blir brukt. Derfor kan de overføres som parametere til en annen funksjon. I det følgende eksemplet kan int-funksjonen overføres som en parameter til kartfunksjonen:

>>> liste (kart (int, ["1", "2", "3"]))

[1, 2, 3]

De kan tilordnes variabler og returneres. For eksempel, i følgende kode kan du tilordne funksjonen hello_world, og deretter utføre variabelen som en funksjon.

Fordel

- Fokuser på hva du vil oppnå (deklarativ) og ikke på hvordan du skal oppnå det (tvingende).

- De inneholder ikke oppdragsuttalelser, så etter at variabler er gitt en verdi, vil de ikke lenger endres. Derfor inneholder funksjonelle programmer ikke bivirkninger.

- Den logiske strømmen er klar, siden staten er mindre spredt og ikke implisitt modifiseres.

- Støtter begrepet lat evaluering, noe som betyr at verdien bare blir evaluert og lagret når det er nødvendig.

- Siden rene funksjoner ikke endrer noen tilstand og er helt avhengige av input, 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 eventuelle eksterne data endres, er implementeringen av samtidigheten effektiv.

- Funksjoner behandles som verdier, overføres til andre funksjoner som parametere. Dette forbedrer forståelsen og lesbarheten til koden..

- Rene funksjoner tar parametrene en gang, og gir uforanderlig produksjon. 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 gjennomsnittlig programmererproduktivitet i form av kodelinjer er mer eller mindre den samme for ethvert programmeringsspråk, og oversettes til høyere produktivitet.

Ingen kontrollflyt

Å ringe en funksjon kan ikke ha en annen effekt enn å beregne resultatet. Dette utelukker en viktig kilde til feil, og gjør også rekkefølgen for utførelse irrelevant, siden ingen sekundær effekt vil kunne endre verdien av et uttrykk, og det kan evalueres når som helst..

Programmereren er lettet over byrden ved å etablere en strøm av kontroll. Siden uttrykk kan evalueres når som helst, kan variabler erstattes av deres verdier.

Denne autonomien favoriserer at funksjonelle programmer er mer matematisk håndterbare enn konvensjonelle programmer..

Ulemper

- Det funksjonelle programmeringsparadigmet er ikke greit, noe som gjør det vanskelig for en nybegynner å forstå.

- Det er vanskelig å vedlikeholde, ettersom mange objekter utvikler seg under koding.

- I noen tilfeller forårsaker skriving av 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 trenger konstant refactoring.

- Å skrive programmer i rekursiv stil i stedet for å bruke sløyfer eller sløyfer kan være en veldig skremmende oppgave..

- Objekter representerer kanskje ikke problemet riktig.

- Selv om det er enkelt å skrive rene funksjoner, er det ganske vanskelig å kombinere dem med resten av applikasjonen og med inngang / utgang.

applikasjoner

Programmering av kunstig intelligens gjøres på funksjonelle programmeringsspråk, og teknikker for kunstig intelligens migrerer til virkelige applikasjoner.

Det utmerker seg også i implementeringen av komplekse matematiske modeller. Av denne grunn har en av de viktigste bruken 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 implementering av parallell behandling. Dette skyldes dets evne til å dra nytte av rene funksjoner, som alltid gir samme verdi uavhengig av rekkefølgen de utføres i..

Funksjonell metodikk

WhatsApp bruker programmeringsspråket Erlang, som følger den funksjonelle programmeringsmodellen, slik at mer enn hundre av sine ansatte kan håndtere dataene som tilhører rundt 1,6 milliarder mennesker..

En annen viktig bærer av den funksjonelle programmeringsstilen er Haskell. Den brukes av Facebook i antispam-systemet. Selv JavaScript, et av de mest brukte programmeringsspråkene, pryder egenskapene til et dynamisk type funksjonsspråk.

Språk som støtter funksjonell programmering

D

Den ble designet etter C ++, og oppnådde alle fordelene samtidig som de observerte svakhetene ved å måtte være kompatible med C elimineres.

Erlang

Den er meget skalerbar og samtidig, noe som gjør den ideell for telekommunikasjon og andre applikasjoner som mottar enorme mengder data i en uforutsigbar rekkefølge..

Haskell

Dette er et rent funksjonelt programmeringsspråk som bruker Lambda-beregning.

ML

Den 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 åpent kildespråk som er basert på Caml. Det har en tendens til å lage veldig lette programmer, noe som hjelper dem å laste og kjøre raskere enn de som er opprettet av andre språk.

Ordning

Den er basert på LISP-syntaksen og ALGOL-strukturen. På grunn av sin enkelhet brukes den i mange datalogikurs som en introduksjon til programdesign for å vise noen av de grunnleggende programmene i dataprogrammering..

Referanser

  1. Hvem er vert for dette (2019). Lær funksjonell programmering: Denne stilen for koding vil blåse i tankene dine. Hentet fra: whoishostingthis.com.
  2. Andrea Bertoli (2019). En tilstrekkelig introduksjon til funksjonell programmering. Hentet fra: dev.to.
  3. Hacker Earth (2020). Funksjonell programmering. Hentet fra: hackerearth.com.
  4. Clojure (2020). Funksjonell programmering. Hentet fra: clojure.org.
  5. Akhil Bhadwal (2020). Funksjonell programmering: Konsepter, fordeler, ulemper og applikasjoner. Hack. Hentet fra: hackr.io.
  6. Guru99 (2020). Hva er funksjonell programmering? Opplæring med eksempel. Hentet fra: guru99.com.

Ingen har kommentert denne artikkelen ennå.