- Osnovne ideje
- značilnosti
- Čiste funkcije
- Prvovrstne lastnosti
- Referenčna preglednost
- Rekurzija
- Neizmenljivost
- Primeri
- Imperativni in deklarativni pristopi
- Čiste funkcije
- Deluje kot prvovrstni predmeti
- Prednost
- Krajši in lažji za razumevanje
- Brez regulacijskega pretoka
- Slabosti
- Prijave
- Funkcionalna metodologija
- Jeziki, ki podpirajo funkcionalno programiranje
- D
- Erlang
- Haskell
- ML
- Cilj Caml
- Shema
- Reference
V funkcionalnih programskih ustreza programiranja vzorec temelji na konceptu navedbo obnašanje programa, kot funkcionalno matematični model namesto eksplicitnih zaporedij navodil za procesor, ki je glavni koncept nujna programiranju.
Funkcionalni jezik bolj poudarja stavke in izraze, ne pa izvrševanje stavkov. V tem programiranju je rezultat odvisen le od parametrov, ki so preneseni na funkcijo, za razliko od drugih vrst, ki upoštevajo lokalno ali globalno stanje.

Diagram delovanja funkcije preslikave v funkcionalnem programskem jeziku Haskell. Vir: Pluke - Lastno delo, CC0 commons.wikimedia.org.
Njegovo ime izvira iz matematičnih funkcij, ki so dodelitev niza vhodov nizu izhodov. Matematična funkcija v resnici ne opravi nobenega dela, temveč opisuje model procesa in s formulo razloži, kaj niz vhodov proizvede v funkciji.
Osnovne ideje
Temelj, na katerem je temeljilo funkcionalno programiranje, je bil lambda račun, ki je bil razvit v tretjem desetletju 20. stoletja za določanje in uporabo funkcij. LISP je bil prvi tovrstni programski jezik, zasnovan leta 1960.
Čeprav je večina programskih jezikov sestavljena iz vhodov, izhodov in zunanjih spremenljivk, ki jih je mogoče nastaviti ali uporabljati znotraj funkcij, se funkcionalno programiranje temu izogne. Ideja je, da bi vsakič, ko je funkcija poklicana z enakimi parametri, morala vrniti isto vrednost.
značilnosti
Funkcijski programski jeziki se imenujejo aplikacije, ker se funkcije uporabljajo za njihove parametre, pa tudi deklarativne in nepostopne, saj opredelitve določajo, kaj je treba izračunati in ne, kako se izračuna.
Čiste funkcije
Funkcija je čista, če nima opaznih stranskih učinkov, kot so spreminjanje zunanjih spremenljivk, spremembe datotečnega sistema in tako naprej.
Te funkcije veljajo za prepričljive, saj ne bodo izrecno spremenile nobenih spremenljivk, od katerih so lahko v nekem trenutku odvisni drugi deli kode. Zdi se nerodno, da bi se te omejitve kodirale, vendar bi bilo treba te funkcije šteti za deterministične, predvidljive in sestavljive.
Prvovrstne lastnosti
Funkcije veljajo za vrednosti, ki jih je mogoče dodeliti spremenljivkam, zato jih je mogoče prenesti na druge funkcije in jih vrniti. To pomeni, da je funkcijo mogoče uporabiti, kot da bi bil parameter ali kot vrednost, ki se vrača.
To pomeni, da se funkcija lahko prenese kot taka, ne le kot rezultat funkcije. Na primer, upoštevajte dvojno (x) funkcijo, ki vrne dvakratno vrednost vhodnega parametra. Tako bi dvojno (2) vrnilo 4.
Ker gre za funkcijo prvega razreda, bi bila koda (dvojna (dvojna (2)) enaka dvojni (4) kodi. To vam omogoča, da eno funkcijo gnezdite kot parameter druge in tako naprej.
Referenčna preglednost
Nanaša se na dejstvo, da v tem programskem vzorcu ni izjav o dodelitvi. To pomeni, da morate definirati nove spremenljivke, če želite shraniti dodatne vrednosti. Zato je stanje spremenljivke ves čas konstantno.
To odpravlja najmanjšo možnost neželenih učinkov, saj lahko katero koli spremenljivko v kateri koli točki izvajanja programa nadomestite s svojo resnično vrednostjo.
Rekurzija
V funkcionalnem programiranju ni zank "za" in "while". Namesto tega se iteracija opira na rekurzijo. Rekurzija se izvaja s pomočjo rekurzivnih funkcij, ki se ponavljajo sami, dokler ni dosežen osnovni primer.
Neizmenljivost
Spremenljivke so nespremenljive, torej spremenljivke ni mogoče spremeniti, ko je inicializirana. Čeprav lahko ustvarite novo spremenljivko, spreminjanje obstoječih spremenljivk ni dovoljeno.
Primeri
Imperativni in deklarativni pristopi
S primerom lahko analizirate razliko med temi pristopi in pri obeh ureditvah izvajate isto operacijo, to je filtriranje neparnih številk s seznama, pri čemer 5 nadomestite s parnimi številkami, manjšimi od 5.

Gre za isti izračun, z enakim rezultatom. Kakor vidite, je nujna koda dobesedna in ni takoj jasna. Po drugi strani je deklarativni pristop berljiv in izrecen, saj se osredotoča na to, kar želite dobiti.
Čiste funkcije
Kaj je opredeljeno kot čiste in nečiste funkcije, je mogoče razjasniti z nekaj osnovnimi primeri:

Deluje kot prvovrstni predmeti
Pomeni uporabo funkcij na enak način kot se uporabljajo podatki. Zato jih lahko kot parametre prenesemo na drugo funkcijo. V naslednjem primeru lahko funkcijo int posredujemo kot parameter funkciji preslikave:
>>> seznam (zemljevid (int,))
Lahko jih dodelimo spremenljivkam in jih vrnemo. V naslednji kodi lahko na primer dodelite funkcijo hello_world in spremenljivko izvedite kot funkcijo.

Prednost
- Osredotočite se na to, kar želite doseči (deklarativno) in ne na to, kako to doseči (nujno).
- Ne vsebujejo stavkovnih stavkov, zato se spremenljivkam ne bodo več spremenile, ko bodo spremenljivkam dodeljene vrednosti. Zato funkcionalni programi ne vsebujejo nobenih stranskih učinkov.
- Logični tok je jasen, saj je stanje manj razpršeno in ni implicitno spremenjeno.
- podpira koncept lenobnega ocenjevanja, kar pomeni, da se vrednost oceni in shrani le, kadar je to potrebno.
- Ker čiste funkcije ne spremenijo nobenega stanja in so popolnoma odvisne od vnosa, jih je enostavno razumeti. Povratna vrednost, ki jo dajejo take funkcije, je enaka rezultatu, ki ga ustvarijo.
- Zaradi narave čistih funkcij, ki preprečujejo spreminjanje spremenljivk ali kakršnih koli zunanjih podatkov, postane izvajanje sočasnosti učinkovito.
- Funkcije se obravnavajo kot vrednosti in prehajajo na druge funkcije kot parametri. To izboljša razumevanje in berljivost kode.
- Čiste funkcije enkrat sprejmejo parametre in ustvarijo nespremenljiv izhod. Uporaba nespremenljivih vrednosti olajša razhroščevanje in testiranje.
Krajši in lažji za razumevanje
So krajši in jih je lažje razumeti kot imperativi. Študije so pokazale, da je povprečna produktivnost programerja v smislu kodnih vrstic bolj ali manj enaka za kateri koli programski jezik, kar pomeni, da je večja produktivnost.
Brez regulacijskega pretoka
Klicanje funkcije ne more imeti drugačnega učinka kot izračun njenega rezultata. To izključuje glavni vir napak, zato je vrstni red izvršitve nepomemben, saj noben stranski učinek ne more spremeniti vrednosti izraza in ga je mogoče kadar koli oceniti.
Programer je razrešen bremena vzpostavitve toka nadzora. Ker je izraze mogoče kadarkoli ovrednotiti, lahko spremenljivke zamenjamo z njihovimi vrednostmi.
Ta avtonomija naredi funkcionalne programe bolj matematično vodljive od običajnih programov.
Slabosti
- Paradigma funkcionalnega programiranja ni preprosta, zato jo začetnik težko razume.
- Težko je vzdrževati, saj se med kodiranjem razvije veliko predmetov.
- V nekaterih primerih pisanje čistih funkcij povzroči zmanjšanje berljivosti kode.
- Spremembene vrednosti v kombinaciji s rekurzijo lahko povzročijo drastično zmanjšanje zmogljivosti sistema.
- Ponovna uporaba je zelo zapletena in zahteva stalno refactoring.
- Pisanje programov v rekurzivnem slogu namesto uporabe zank ali zank je lahko zelo zastrašujoča naloga.
- Predmeti težave ne predstavljajo pravilno.
- Čeprav se pisanje čistih funkcij izkaže za preprosto, je njihovo kombiniranje z ostalo aplikacijo in z vhodno / izhodnimi operacijami precej težko
Prijave
Programiranje umetne inteligence poteka v funkcionalnih programskih jezikih, tehnike umetne inteligence pa se preselijo v aplikacije v resničnem svetu.
Odličen je tudi pri izvajanju zapletenih matematičnih modelov. Zaradi tega je ena od glavnih uporab funkcionalnih jezikov že tradicionalno akademska. Uporaben je za razvoj izvedljivih specifikacij in izvedb prototipov.
Številni funkcionalni jeziki se odlikujejo tudi pri izvajanju vzporedne obdelave. To je posledica njegove sposobnosti, da izkoristi čiste funkcije, ki vedno vrnejo isto vrednost, ne glede na vrstni red, v katerem se izvajajo.
Funkcionalna metodologija
WhatsApp uporablja programski jezik Erlang, ki sledi funkcionalnemu modelu programiranja, s čimer več kot sto zaposlenih omogoča obdelavo podatkov, ki pripadajo približno 1,6 milijardam ljudi.
Drug pomemben nosilec funkcionalnega stila programiranja je Haskell. Uporablja ga Facebook v svojem antispam sistemu. Tudi JavaScript, eden najpogosteje uporabljanih programskih jezikov, se ponaša z lastnostmi dinamično tipkanega funkcionalnega jezika.
Jeziki, ki podpirajo funkcionalno programiranje
D
Zasnovan je bil po C ++, saj je izkoristil vse svoje prednosti, hkrati pa odpravil opažene pomanjkljivosti združljivosti s C.
Erlang
Je zelo razširljiv in sočasen, zato je idealen za telekomunikacije in druge aplikacije, ki prejemajo ogromne količine podatkov v nepredvidljivem zaporedju.
Haskell
To je čisto funkcionalen programski jezik, ki uporablja Lambda izračun.
ML
Uporablja se v matematičnih, znanstvenih, finančnih, analitičnih in drugih aplikacijah. Ena izmed njegovih prednosti je izdelava programske opreme za upravljanje drugih programov.
Cilj Caml
Je odprtokodni jezik, ki temelji na Camlu. Nagibajo k ustvarjanju zelo lahkih programov, ki jim pomagajo, da se nalagajo in tečejo hitreje kot tisti, ki jih ustvarijo drugi jeziki.
Shema
Temelji na sintaksi LISP in strukturi ALGOL. Zaradi svoje preprostosti se v številnih tečajih računalništva uporablja kot uvod v načrtovanje programov, da prikaže nekaj osnov računalniškega programiranja.
Reference
- Kdo to gosti (2019). Naučite se funkcionalnega programiranja: Ta slog kodiranja bo razburil vaš um. Vzeto iz: whoishostingthis.com.
- Andrea Bertoli (2019). Ustrezen uvod v funkcionalno programiranje. Vzeto iz: dev.to.
- Hekerska zemlja (2020). Funkcijsko programiranje Vzeto iz: hackerearth.com.
- Clojure (2020). Funkcijsko programiranje Izvedeno iz: clojure.org.
- Akhil Bhadwal (2020). Funkcijsko programiranje: pojmi, prednosti, slabosti in aplikacije. Hack. Vzeto iz: hackr.io.
- Guru99 (2020). Kaj je funkcionalno programiranje? Vadnica s primerom. Vzeto iz: guru99.com.
