Značilnosti funkcionalnega programiranja, primeri, prednosti, slabosti

Značilnosti funkcionalnega programiranja, primeri, prednosti, slabosti

The Funkcionalno programiranje Ustreza vzorcu programiranja, ki temelji na konceptu navajanja postopka programa kot matematičnega funkcionalnega modela, ne pa kot kot eksplicitnih zaporedja navodil s procesorjem, ki je glavni koncept v imperativnem programiranju.

Funkcionalni jezik poudarja stavke in izraze, namesto da bi izvajal navodila. V tem programu bo rezultat odvisen le od parametrov, ki so preneseni na funkcijo, za razliko od drugih vrst, ki ubogajo lokalno ali globalno državo.

Kako deluje preslikava v jeziku funkcionalnega programiranja Haskell. Vir: avtor Pluke - lastno delo, CC0 Commons.Wikimedia.org.

Njegovo ime izhaja iz matematičnih funkcij, ki so dodelitev nabora vnosov na niz izhodov. Matematična funkcija res ne deluje, vendar opisuje model procesa in skozi formulo razloži, kaj nabor vnosov proizvaja v funkciji.

[TOC]

Osnovne ideje

Temelj, na katerem temelji funkcionalno programiranje, je bil izračun Lambda, ki je bil razvit v tretjem desetletju dvajsetega stoletja, da bi opredelil in uporabil funkcije. LISP je bil prvi programski jezik, ki je bil zasnovan leta 1960.

Čeprav večina programskih jezikov je sestavljena iz zunanjih vnosov, izhodov in spremenljivk, ki jih je mogoče konfigurirati ali uporabiti s funkcije. Ideja je, da mora vsakič, ko se funkcija pokliče z istimi parametri, vrniti isto vrednost.

Značilnosti

Funkcionalni programski jeziki se imenujejo aplikacije, ker funkcije veljajo za njihove parametre, poleg deklarativnih in neproceduralnih, saj definicije določajo, kaj želite izračunati in ne kako se izračuna.

Čiste funkcije

Funkcija je čista, kadar nima opaznih stranskih učinkov, kot so sprememba zunanjih spremenljivk, spremembe v datotečnem sistemu itd.

Te funkcije se štejejo za prepričljive, saj ne bodo izrecno spremenile nobene spremenljivke, na katerih bi lahko bili odvisni drugi deli kode, ki bi lahko bili v nekem času odvisni. Zdi se, da je neprijetno kodificiranje s temi omejitvami, vendar je treba upoštevati, da so te funkcije determinirane, predvidljive in sestavljene.

Funkcije prvega razreda

Funkcije veljajo za vrednosti, ki jih je mogoče dodeliti spremenljivkam, zato jih lahko prenesejo na in se vrnejo iz drugih funkcij. To pomeni, da lahko funkcijo uporabimo, kot da gre za parameter ali kot vrednost, ki se vrne.

To pomeni, da se lahko funkcija prenaša kot taka, namesto samo rezultata funkcije. Na primer, razmislite o dvojnem (x) funkciji, ki vrne dvakrat večjo vrednost njegovega vhodnega parametra. Tako bi se dvojna (2) vrnila 4.

Lahko vam služi: evolucija industrijskega vzdrževanja: od izvora do sedanjosti

Kot je funkcija prvega razreda, bi bila koda (dvojna (dvojna (2)) enaka dvojna koda (4). To omogoča gnezdenje funkcije kot parameter drugega in tako naprej.

Referenčna preglednost

Nanaša se na dejstvo, da v tem programiranju ni kazni dodelitve. To pomeni, da je treba določiti nove spremenljivke, če so zaželene dodatne vrednosti. Zato je stanje spremenljivke ves čas konstantno.

To odpravlja najmanjšo možnost neželenih učinkov, saj lahko katero koli spremenljivko nadomesti z njegovo resnično vrednostjo med katero koli točko izvajanja programa.

Rekurzija

V funkcionalnem programiranju ni zank "za" in "medtem ko". Namesto tega je iteracija odvisna od rekurzije. Rekurzija se izvaja z rekurzivnimi funkcijami, ki se imenujejo ponavljajoče, dokler ni dosežen osnovnega primera.

Nespremenljivost

Spremenljivke so nespremenljive, to je, da spremenljivke ni mogoče spremeniti, ko se inicializira. Čeprav je mogoče ustvariti novo spremenljivko, obstoječe spremenljivke niso dovoljene.

Primeri

Nujni in deklarativni pristopi

S primerom je mogoče analizirati razliko med temi pristopi, tako da v obeh določbah izvede enako operacijo, to je filtriranje lih številk seznama, medtem ko se številke manjše od 5 nadomestijo s 5.

Je enak izračun, z enakim rezultatom. Vendar je, kot je razvidno, nujna koda podrobna in ni takoj jasna. Po drugi strani je deklarativni pristop berljiv in izrecno, saj se osredotoča na tisto, kar želite pridobiti.

Čiste funkcije

Z nekaj osnovnimi primeri lahko razjasnite, kaj je opredeljeno kot čiste in nečiste funkcije:

Funkcije, kot so predmeti prvega razreda

Pomeni uporabo funkcij na enak način kot uporabljeni podatki. Zato lahko kot parametri prehajajo na drugo funkcijo. V naslednjem primeru lahko funkcijo INT prenesete kot parameter na funkcijo zemljevida:

>>> seznam (map (int, ["1", "2", "3"]))

[1, 2, 3]

Lahko jih dodelijo spremenljivkam in jih vrnejo. Na primer, naslednjo kodo lahko dodelite funkcijo Hello_World in nato izvedete spremenljivko kot funkcijo.

Prednosti

- Osredotočite se na to, kar želite doseči (deklarativno) in ne na to, kako to doseči (nujno).

- Ne vsebujejo dodelitvenih stavkov, zato se po vrednosti spremenljivk ne bodo več spremenile. Zato funkcionalni programi ne vsebujejo stranskih učinkov.

Vam lahko služi: tehnološke nesreče

- Logični tok je jasen, saj je država manj razpršena in ni implicitno spremenjena.

- Priznava koncept odloženega ocenjevanja, kar pomeni, da se vrednost ocenjuje in shrani le, kadar je to potrebno.

- Ker čiste funkcije ne spreminjajo nobenega stanja in so popolnoma odvisne od vhoda, jih je enostavno razumeti. Vrnska vrednost, ki jo dajejo takšne funkcije, je enaka rezultatu, ki ga ustvarijo.

- Zaradi narave čistih funkcij preprečevanja spremenljivk ali kakršnih koli zunanjih podatkov, ki se spreminjajo.

- Funkcije se obravnavajo kot vrednosti in se premikajo na druge funkcije, kot so parametri. To izboljša razumevanje in berljivost kode.

- Čiste funkcije zavzemajo parametre enkrat in ustvarijo nespremenljiv izhod. Z uporabo nespremenjenih vrednosti se čiščenje in preskusi olajšajo.

Krajši in enostavnejši za razumevanje

So krajši in lažji za razumevanje kot imperativi. Študije so pokazale, da je povprečna produktivnost programerja v smislu kode bolj ali manj enaka za kateri koli programski jezik, pri čemer prevajanje v večjo produktivnost.

Brez kontrolnega toka

Ko kličete funkcijo, ne morete imeti drugačnega učinka od izračuna njegovega rezultata. To izključuje pomemben vir napak, zaradi česar je naročilo za izvedbo nepomembno, saj noben stranski učinek ne more spremeniti vrednosti izraza, saj ga je mogoče kadar koli oceniti.

Programer je utemeljen breme vzpostavljanja kontrolnega toka. Ker lahko izrazi kadar koli ocenimo, lahko spremenljivke nadomestimo z njihovimi vrednosti.

Ta avtonomija podpira, da so funkcionalni programi bolj matematično obvladljivi kot običajni programi.

Slabosti

- Paradigma funkcionalnega programiranja ni preprosta, zato je za začetnika težko razumeti.

- Težko je vzdrževati, saj se med kodiranjem razvijajo številni predmeti.

- V nekaterih primerih, ko pišete čiste funkcije, se povzroči zmanjšanje berljivosti kode.

- Nepremirljive vrednosti v kombinaciji z rekurzijo lahko privedejo do drastičnega zmanjšanja zmogljivosti sistema.

- Ponovna uporaba je zelo zapletena in potrebuje stalno refaktorizacijo.

- Pisanje programov z rekurzivnim slogom namesto uporabe vezi ali zank bi lahko bila zelo odvračajoča naloga.

- Predmeti morda ne bodo pravilno predstavljali težav.

Lahko vam služi: 50 priporočenih blogov za video igre

- Čeprav se pisanje čistih funkcij izkaže za preprosto, je kombiniranje s preostalo aplikacijo in z vhodnimi/izhodnimi operacijami precej težko

Prijave

Program umetne inteligence se izvaja v funkcionalnih programskih jezikih in tehnike umetne inteligence selijo v resnične aplikacije.

Izstopa tudi pri izvajanju zapletenih matematičnih modelov. Zaradi tega je bila ena glavnih uporabe funkcionalnih jezikov tradicionalno akademska. Uporabna je za razvoj izvedljivih specifikacij in izvedbe prototipov.

Številni funkcionalni jeziki izstopajo tudi za izvajanje vzporedne obdelave. To je posledica njegove sposobnosti izkoriščanja čistih funkcij, ki vedno vrnejo enako vrednost, ne glede na vrstni red, v katerem se izvajajo.

Funkcionalna metodologija

WhatsApp uporablja programski jezik ERLAG, ki sledi modelu funkcionalnega programiranja, ki več kot sto zaposlenih omogoča, da obravnavajo podatke, ki pripadajo približno 1.600 milijonov ljudi.

Drug pomemben nosilec sloga funkcionalnega programiranja je Haskell. Uporablja ga Facebook v vašem sistemu Antispam. Tudi JavaScript, eden najbolj uporabljenih programskih jezikov, se ponaša z lastnostmi dinamičnega funkcionalnega jezika.

Jeziki, ki podpirajo funkcionalno programiranje

D

Zasnovan je bil po C ++, pri čemer je pridobil vse njegove prednosti, hkrati pa je odpravil svoje pomanjkljivosti, ki so bile opažene, da je bilo združljivo s C.

Erlang

Je zelo razširljiv in sočasno, zato je idealen za telekomunikacije in druge aplikacije, ki prejemajo ogromne količine podatkov v nepredvidljivem vrstnem redu.

Haskell

To je čisti funkcionalni programski jezik, ki zanj uporablja izračun Lambda.

Ml

Uporablja se v matematičnih, znanstvenih, finančnih, analitičnih in drugih vrstah drugih vrst. Ena od njegovih prednosti je priprava programske opreme za ravnanje z drugimi programi.

Objektivni CAML

To je odprtokodni jezik, ki temelji na CAML. Ponavadi ustvarja zelo lahke programe, kar jim pomaga, da se naložijo in izvajajo hitreje od tistih, ki jih ustvarjajo drugi jeziki.

Shema

Temelji na lisp sintaksi in strukturi algol. Zahvaljujoč svoji preprostosti se uporablja na številnih računalniških tečajih kot uvod v zasnovo programov, da bi prikazali nekatere temelje računalniškega programiranja.

Reference

  1. WHHO gosti to (2019). Naučite se funkcionalnega programiranja: Ta slog kodiranja vam bo razstrelil um. Vzet od: whoisostingthis.com.
  2. Andrea Bertoli (2019). Ustrezen uvod v funkcionalni programmmmm. Vzet od: dev.do.
  3. Hacker Earth (2020). Funkcionalno programiranje. Vzet iz: hakereph.com.
  4. Clojure (2020). Funkcionalno programiranje. Vzet iz: clojure.org.
  5. Akhil Bhadwal (2020). Funkcionalno programiranje: koncepti, adventami, slabosti in aplikacije. HacKr. Vzeto od: Hackr.Io.
  6. Guru99 (2020). Kaj je funkcionalno programiranje? S primerom vadnice. Vzeto od: Guru99.com.