Funksjonelle programmeringsegenskaper, eksempler, fordeler, ulemper

Funksjonelle programmeringsegenskaper, eksempler, fordeler, ulemper

De Funksjonell programmering Det tilsvarer programmeringsmønsteret som er basert på konseptet med å oppgi prosessen til et program som en matematisk funksjonell modell i stedet for som eksplisitte sekvenser av instruksjoner til en prosessor, som er hovedkonseptet i det imperative programmering.

Funksjonelt språk legger vekt på setninger og vilkår i stedet for å utføre instruksjoner. I dette programmet vil resultatet bare avhenge av parametrene som sendes til en funksjon, i motsetning til andre typer som overholder en lokal eller global stat.

Hvordan fungerer kartleggingen i Haskell -funksjonelle programmeringsspråket. Kilde: av Pluke - eget arbeid, CC0 Commons.Wikimedia.org.

Navnet kommer fra matematiske funksjoner, som er tildelingen av et sett med oppføringer til et sett med utganger. En matematisk funksjon fungerer virkelig ikke, men beskriver modellen til en prosess, og forklarer gjennom en formel hva et sett med oppføringer produserer i en funksjon.

[TOC]

Grunnleggende ideer

Grunnlaget som den funksjonelle programmeringen var basert på var Lambda -beregningen, som ble utviklet i løpet av det tredje tiåret av det tjuende århundre for å definere og anvende funksjoner. Lisp var det første programmeringsspråket av denne typen, designet i 1960.

Selv om de fleste programmeringsspråk består av eksterne oppføringer, utganger og variabler som kan konfigureres eller brukes fra funksjoner, forhindrer funksjonell programmering det. Tanken er at hver gang en funksjon kalles med samme parametere, må den returnere samme verdi.

Kjennetegn

Funksjonelle programmeringsspråk kalles applikasjoner, fordi funksjonene gjelder for deres parametere, i tillegg til deklarative og ikke -prosedyre, siden definisjonene spesifiserer hva du vil beregne og ikke hvordan det beregnes.

Rene funksjoner

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

Disse funksjonene anses som overbevisende, siden de ikke uttrykkelig vil endre noen variabel som andre deler av koden kan avhenge på noen tid. Det virker ubehagelig som kodifiserer med disse begrensningene, men det bør vurderes at disse funksjonene er deterministiske, forutsigbare og komponerbare.

Førsteklassefunksjoner

Funksjonene blir betraktet som verdier som kan tilordnes variabler, slik at de kan gi dem til og returnere fra andre funksjoner. Det vil si at en funksjon kan brukes som om den var en parameter eller som en verdi som blir returnert.

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

Det kan tjene deg: Evolusjon av industrielt vedlikehold: Fra opprinnelse til i dag

Som en førsteklasses funksjon, ville koden (dobbel (dobbel (2)) være den samme som dobbeltkoden (4). Dette gjør det mulig å hekke en funksjon som en parameter for en annen og så videre.

Referensiell gjennomsiktighet

Det refererer til det faktum at det i dette programmeringsmønsteret ikke er noen oppdragssetninger. Det vil si at nye variabler bør defineres hvis det er ønsket ytterligere verdier. 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 virkelige verdi under ethvert programutførelsespunkt.

Rekursjon

I funksjonell programmering er det ingen løkker "for" og "while". I stedet avhenger iterasjon av rekursjon. Rekursjon implementeres ved hjelp av rekursive funksjoner, som kaller seg repetitivt til basesaken er nådd.

Uforanderlighet

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

Eksempler

Imperative og deklarative tilnærminger

Med et eksempel kan forskjellen mellom disse tilnærmingene analyseres, og utføre den samme operasjonen i begge bestemmelsene, som er å filtrere oddetall på en liste, mens tallene mindre enn 5 erstattes av 5.

Det er den samme beregningen, med samme resultat. Imidlertid, som kan sees, er den imperative koden detaljert og er ikke klart umiddelbart. På den annen side er den deklarative tilnærmingen lesbar og eksplisitt, fordi den fokuserer på det du vil oppnå.

Rene funksjoner

Du kan avklare hva som er definert som rene og uren funksjoner med noen grunnleggende eksempler:

Funksjoner som førsteklasses objekter

Betyr å bruke funksjoner på samme måte som data brukes. Derfor kan de passere som parametere til en annen funksjon. I det følgende eksemplet kan du passere INT -funksjonen som en parameter til kartfunksjonen:

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

[1, 2, 3]

De kan tilordnes variabler og returnere dem. For eksempel kan følgende kode tildeles Hello_World -funksjonen, og deretter utføre variabelen som en funksjon.

Fordeler

- Fokuser på hva du vil oppnå (erklærende) og ikke hvordan du skal oppnå det (imperativ).

- De inneholder ikke tildelingssetninger, så etter at variablene er gitt en verdi, vil de ikke lenger endre. Derfor inneholder funksjonelle programmer ikke bivirkninger.

Kan tjene deg: Teknologiske katastrofer

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

- Innrømmer begrepet utsatt evaluering, noe som betyr at verdien bare blir evaluert og lagret når det er nødvendig.

- Ettersom rene funksjoner ikke endrer noen tilstand og er helt avhengige av inngangen, 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 å forhindre variablene eller eksterne data fra å endre seg, blir implementeringen av samtidig effektiv.

- Funksjoner blir behandlet som verdier, og beveger seg til andre funksjoner som parametere. Dette forbedrer forståelsen og lesbarheten til koden.

- De rene funksjonene tar parametrene en gang, og produserer en uforanderlig avkjørsel. Ved å bruke uforanderlige verdier, blir rensing og tester tilrettelagt.

Kortere og lettere å forstå

De er kortere og lettere å forstå enn imperativer. Studier har vist at den gjennomsnittlige programmererproduktiviteten når det gjelder kodelinjer er mer eller mindre den samme for ethvert programmeringsspråk, og oversettes i større produktivitet.

Ingen kontrollstrøm

Når du ringer en funksjon, kan du ikke ha en annen effekt fra beregningen av resultatet. Dette utelukker en viktig kilde til feil, og gjør også utførelsesordren irrelevant, siden ingen bivirkninger kan endre verdien av et uttrykk, og kunne evalueres når som helst når som helst.

Programmereren er tilfredsstillende belastningen med å etablere en kontrollstrøm. Ettersom uttrykk kan evalueres når som helst, kan variabler erstattes av verdiene deres.

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

Ulemper

- Det funksjonelle programmeringsparadigmet er ikke enkelt, så det blir vanskelig å forstå for en nybegynner.

- Det er vanskelig å opprettholde, siden mange gjenstander under koding utvikler seg.

- I noen tilfeller, når du skriver rene funksjoner, er det forårsaket 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 refactorization.

- Å skrive programmer med en rekursiv stil i stedet for å bruke bånd eller løkker kan være en veldig nedslående oppgave.

- Objekter representerer kanskje ikke problemet riktig.

Det kan tjene deg: 50 anbefalte videospillblogger

- Selv om det å skrive rene funksjoner viser seg å være enkle, er det ganske vanskelig å kombinere dem med resten av applikasjonen og med inngangs-/utgangsoperasjoner

applikasjoner

Kunstig intelligensprogram utføres i funksjonelle programmeringsspråk og kunstig intelligensteknikker migrerer til virkelige applikasjoner.

Skiller seg også ut 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 prototypeimplementeringer.

Mange funksjonelle språk skiller seg også ut for å implementere parallell behandling. Dette skyldes dens evne til å dra nytte av rene funksjoner, som alltid returnerer samme verdi uavhengig av rekkefølgen de blir utført.

Funksjonell metodikk

WhatsApp bruker Erlag -programmeringsspråket, som følger den funksjonelle programmeringsmodellen, slik at mer enn hundre av de ansatte kan håndtere dataene som tilhører omtrent 1.600 millioner mennesker.

En annen viktig bærer av den funksjonelle programmeringsstilen er Haskell. Det brukes av Facebook i Antispam -systemet ditt. Til og med JavaScript, et av de mest brukte programmeringsspråkene, kan skilte med egenskapene til et dynamisk funksjonelt språk.

Språk som støtter funksjonell programmering

D

Den ble designet etter C ++, og oppnådd alle fordelene mens de eliminerer svakhetene som er observert for å måtte være kompatible med C.

Erlang

Det er svært skalerbart og samtidig, noe som 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 -beregningen for den.

Ml

Det brukes i matematiske, vitenskapelige, økonomiske, analytiske og andre typer andre typer. En av styrkene er å lage programvare for å håndtere andre programmer.

Mål Caml

Det er et open source -språk som er basert på CAML. Det har en tendens til å lage veldig lette programmer, og hjelper dem å bli lastet og utført raskere enn de som er laget av andre språk.

Ordning

Det er basert på LISP -syntaks og algolstruktur. Takket være dens enkelhet brukes den i mange datakurs som en introduksjon til utforming av programmer for å vise noen av grunnlagene for dataprogrammering.

Referanser

  1. Whho er vertskap for dette (2019). Lær funksjonell programmering: Denne kodingsstilen vil blåse tankene dine. Hentet fra: hvem.com.
  2. Andrea Bertoli (2019). En tilstrekkelig introduksjon til funksjonell programmmmm. Hentet fra: Dev.til.
  3. Hacker Earth (2020). Funksjonell programmering. Hentet fra: Hakerph.com.
  4. Clojure (2020). Funksjonell programmering. Hentet fra: Clojure.org.
  5. Akhil Bhadwal (2020). Funksjonell programmering: konsepter, adventasjer, ulemper og applikasjoner. Hackr. Hentet fra: hackr.Io.
  6. Guru99 (2020). Hva er funksjonell programmering? Med eksempelopplæring. Hentet fra: guru99.com.