Mis on funktsionaalne programmeerimine? Õpetus koos näitega
Mis on funktsionaalne programmeerimine?
Funktsionaalne programmeerimine (nimetatakse ka FP-ks) on viis mõelda tarkvara ehitamisele, luues puhtaid funktsioone. See väldib objektorienteeritud programmeerimises täheldatud jagatud oleku kontseptsioone, muutuvaid andmeid.
Funktsionaalsed keeled keskenduvad pigem väljenditele ja deklaratsioonidele kui avalduste täitmisele. Seetõttu, erinevalt teistest kohalikust või globaalsest olekust sõltuvatest protseduuridest, sõltub FP väärtuse väljund ainult funktsioonile edastatud argumentidest.
Funktsionaalse programmeerimise tunnused
- Funktsionaalne programmeerimismeetod keskendub tulemustele, mitte protsessile
- Rõhk on sellel, mida tuleb arvutada
- Andmed on muutumatud
- Funktsionaalne programmeerimine Jaotage probleem funktsioonideks
- See põhineb matemaatiliste funktsioonide kontseptsioonil, mis kasutab arvutuste tegemiseks tingimusavaldisi ja rekursiooni
- See ei toeta iteratsiooni nagu silmuslaused ja tingimuslaused nagu If-Else
Funktsionaalse programmeerimise ajalugu
- Funktsionaalse programmeerimise alus on lambdaarvutus. See töötati välja 1930. aastatel funktsionaalse rakenduse, määratluse ja rekursiooni jaoks
- LISP oli esimene funktsionaalne programmeerimiskeel. McCarthy kujundas selle 1960. aastal
- 70ndate lõpus defineerisid Edinburghi ülikooli teadlased ML (meta keele)
- 80. aastate alguses lisab Hope'i keel rekursiooni ja võrrandi arutlemiseks algebralisi andmetüüpe
- Aastal 2004 funktsionaalse keele uuendus "Scala".
Funktsionaalsed programmeerimiskeeled
Mis tahes FP-keele eesmärk on jäljendada matemaatilisi funktsioone. Arvutamise põhiprotsess on aga funktsionaalse programmeerimise puhul erinev.
Siin on mõned silmapaistvamad funktsionaalsed programmeerimiskeeled:
- Haskell
- SML
- Clojure
- Scala
- erlang
- puhastada
- F#
- ML/OCaml Lisp / skeem
- XSLT
- SQL
- Mathematica
Funktsionaalse programmeerimise põhiterminoloogia ja Concepts
Muutumatud andmed
Muutumatud andmed tähendab, et teil peaks olema lihtne luua andmestruktuure, mitte muuta olemasolevaid.
Viidete läbipaistvus
Funktsionaalsed programmid peaksid toiminguid tegema täpselt nii, nagu oleks see esimest korda. Nii saate teada, mis võis programmi täitmise ajal juhtuda või mitte, ja selle kõrvalmõjud. FP terminis nimetatakse seda referentsiliseks läbipaistvuseks.
Modulaarsus
Modulaarne disain suurendab tootlikkust. Väikesi mooduleid saab kiiresti kodeerida ja neil on suurem korduskasutamise võimalus, mis toob kindlasti kaasa programmide kiirema arengu. Peale selle saab mooduleid eraldi testida, mis aitab vähendada seadmetestimisele ja silumisele kuluvat aega.
Hooldatavus
Hooldatavus on lihtne termin, mis tähendab, et FP programmeerimist on lihtsam hooldada, kuna te ei pea muretsema, et midagi väljaspool antud funktsiooni kogemata muudate.
Esmaklassiline funktsioon
„Esimese klassi funktsioon” on definitsioon, mis omistatakse programmeerimiskeele üksustele, mille kasutamisel pole piiranguid. Seetõttu võivad esmaklassilised funktsioonid ilmuda kõikjal programmis.
sulgemine
Sulgemine on sisemine funktsioon, millel on juurdepääs põhifunktsiooni muutujatele isegi pärast seda, kui vanemfunktsioon on täitnud.
Kõrgema järgu funktsioonid
Kõrgemat järku funktsioonid võtavad kas argumentidena muid funktsioone või tagastavad need tulemustena.
Kõrgema järgu funktsioonid võimaldavad osalisi rakendusi või karrimist. See meetod rakendab funktsiooni oma argumentidele ükshaaval, kuna iga rakendus tagastab uue funktsiooni, mis aktsepteerib järgmise argumendi.
Puhas funktsioon
Puhas funktsioon on funktsioon, mille sisendid deklareeritakse sisenditena ja ükski neist ei tohiks olla peidetud. Väljundid deklareeritakse ka väljundina.
Puhtad funktsioonid toimivad vastavalt oma parameetritele. See ei ole tõhus, kui midagi ei tagasta. Lisaks pakub see antud parameetrite jaoks sama väljundit
Näide:
Function Pure(a,b) { return a+b; }
Ebapuhtad funktsioonid
Ebapuhas toimib täpselt vastupidiselt puhtale. Neil on peidetud sisendid või väljundid; seda nimetatakse ebapuhtaks. Ebapuhtaid funktsioone ei saa eraldi kasutada ega testida, kuna neil on sõltuvused.
Näide
int z; function notPure(){ z = z+10; }
Funktsiooni koostis
Funktsioonide koosseis on kahe või enama funktsiooni ühendamine uue funktsiooni loomiseks.
Jagatud osariigid
Jagatud olekud on OOP-i programmeerimises oluline mõiste. Põhimõtteliselt on see objektidele omaduste lisamine. Näiteks kui kõvaketas on objekt, saab atribuutidena lisada salvestusmahtu ja ketta suurust.
Kõrvaltoimed
Kõrvaltoimed on mis tahes olekumuutused, mis toimuvad väljaspool väljakutsutud funktsiooni. Iga FP programmeerimiskeele suurim eesmärk on kõrvalmõjude minimeerimine, eraldades need ülejäänud tarkvarakoodist. FP programmeerimisel on oluline eemaldada ülejäänud programmeerimisloogikast kõrvalmõjud.
Funktsionaalse programmeerimise eelised
- Võimaldab vältida segaseid probleeme ja vigu koodis
- Lihtsam testida ja teostada üksuse testimist ja FP-koodi silumist.
- Paralleelne töötlemine ja samaaegsus
- Kuuma koodi juurutamine ja tõrketaluvus
- Pakub paremat modulaarsust lühema koodiga
- Arendaja tootlikkuse tõus
- Toetab pesastatud funktsioone
- Funktsionaalsed konstruktsioonid nagu Lazy Map & Lists jne.
- Võimaldab tõhusalt kasutada lambdakivi
Funktsionaalse programmeerimise piirangud
- Funktsionaalse programmeerimise paradigma pole lihtne, seetõttu on seda algajale raske mõista
- Raske hooldada, kuna paljud objektid arenevad kodeerimise ajal
- Vajab palju pilkamist ja ulatuslikku keskkonnaseadet
- Taaskasutamine on väga keeruline ja vajab pidevat ümbertöötamist
- Objektid ei pruugi probleemi õigesti kujutada
Funktsionaalne programmeerimine vs objektorienteeritud programmeerimine
Funktsionaalne programmeerimine | OOP |
---|---|
FP kasutab muutumatuid andmeid. | OOP kasutab muutuvaid andmeid. |
Järgib deklaratiivsel programmeerimisel põhinevat mudelit. | Järgib kohustuslikku programmeerimismudelit. |
See keskendub järgmisele: „Mida sa teed. programmis." | See keskendub teemale "Kuidas te oma programmeerimist teete". |
Toetab paralleelset programmeerimist. | Paralleelprogrammeerimise tugi puudub. |
Selle funktsioonidel pole kõrvalmõjusid. | Meetod võib põhjustada palju kõrvaltoimeid. |
Voo juhtimine toimub funktsioonikutsete ja rekursiooniga funktsioonikutsete abil. | Voo juhtimise protsess viiakse läbi tsüklite ja tingimuslausete abil. |
Avalduste täitmise järjekord ei ole väga oluline. | Avalduste täitmise järjekord on oluline. |
Toetab nii "Abstraktsioon andmetest" kui ka "Abstraktsioon käitumisest". | Toetab ainult "Abstraktsiooni andmete üle". |
Järeldus
- Funktsionaalne programmeerimine ehk FP on viis, kuidas mõelda tarkvara loomisele, mis põhineb mõnel põhiprintsiibil
- Funktsionaalse programmeerimise kontseptsioonid keskenduvad tulemustele, mitte protsessile
- Iga FP keele eesmärk on matemaatilised funktsioonid jäljendada
- Mõned silmapaistvamad funktsionaalsed programmeerimiskeeled: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- Puhas funktsioon on funktsioon, mille sisendid deklareeritakse sisenditena ja ükski neist ei tohiks olla peidetud. Väljundid deklareeritakse ka väljundina.
- Muutumatud andmed tähendab, et teil peaks olema lihtne luua andmestruktuure, mitte muuta olemasolevaid
- Võimaldab vältida segaseid probleeme ja vigu koodis
- Funktsionaalne kood pole lihtne, seetõttu on seda algajale raske mõista
- FP kasutab muutumatuid andmeid, samas kui OOP kasutab muutuvaid andmeid