Mis on funktsionaalne programmeerimine?
⚡ Nutikas kokkuvõte
Funktsionaalprogrammeerimine on tarkvara loomise viis, mis koosneb puhastest funktsioonidest, vältides jagatud olekut ja muudetavaid andmeid. See rõhutab avaldiste olulisust lausete asemel, seega sõltub funktsiooni väljund ainult sisenditest, mis muudab programmid ennustatavaks ja testitavaks.
Mis on funktsionaalne programmeerimine?
Funktsionaalprogrammeerimine (nimetatakse ka FP-ks) on tarkvara loomise mõtteviis, mis põhineb puhaste funktsioonide loomisel. See väldib jagatud oleku ja muudetavate andmete kontseptsioone, mida täheldatakse objektorienteeritud programmeerimises.
Funktsionaalkeeled rõhutavad pigem avaldisi ja deklaratsioone kui lausete täitmist. Seega, erinevalt teistest protseduuridest, mis sõltuvad lokaalsest või globaalsest olekust, sõltub FP väljundväärtus ainult funktsioonile edastatud argumentidest.
Funktsionaalse programmeerimise tunnused
- Funktsionaalprogrammeerimise meetod keskendub tulemustele, mitte protsessile.
- Rõhk on sellel, mida arvutada.
- Andmed on muutumatud.
- Funktsionaalprogrammeerimine lagundab probleemi funktsioonideks.
- See põhineb matemaatiliste funktsioonide kontseptsioonil, mis kasutavad arvutuste tegemiseks tingimuslikke avaldisi ja rekursiooni.
- See ei toeta iteratsiooni nagu tsüklilaused ja tingimuslaused nagu If-Else.
Funktsionaalse programmeerimise ajalugu
- Funktsionaalprogrammeerimise aluseks on lambda arvutus. See töötati välja 1930. aastatel funktsionaalsete rakenduste, defineerimise ja rekursiooni jaoks.
- LISP oli esimene funktsionaalne programmeerimiskeel. McCarthy töötas selle välja 1960. aastal.
- 70ndate lõpus defineerisid Edinburghi ülikooli teadlased metakeele (ML).
- 80ndate alguses lisas Hope'i keel rekursiooni ja võrrandipõhise arutluse jaoks algebralised andmetüübid.
- Aastal 2004 uuendati funktsionaalkeelt 'Scala'.
Funktsionaalsed programmeerimiskeeled
Mis tahes FP-keele eesmärk on jäljendada matemaatilisi funktsioone. Funktsionaalprogrammeerimises on arvutuste põhiprotsess aga erinev.
Siin on mõned kõige 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ähendavad, et peaksite saama hõlpsalt luua andmestruktuure olemasolevate muutmise asemel.
Viidete läbipaistvus
Funktsionaalprogrammid peaksid toiminguid sooritama just nii, nagu teeksid seda esimest korda. Seega teate, mis programmi täitmise ajal võis juhtuda või mitte, ja selle kõrvalmõjusid. Funktsionaalprogrammi mõistes nimetatakse seda referentsiaalseks läbipaistvuseks.
Modulaarsus
Modulaarne disain suurendab tootlikkust. Väikseid mooduleid saab kiiresti kodeerida ja neil on suurem tõenäosus taaskasutada, mis kindlasti kiirendab programmide arendamist. Lisaks sellele saab mooduleid eraldi testida, mis aitab vähendada ühiktestimisele ja vigade otsimisele kuluvat aega.
Hooldatavus
Hooldatavus on lihtne termin, mis tähendab, et FP programmeerimist on lihtsam hooldada, kuna te ei pea muretsema selle pärast, et kogemata muudetakse midagi väljaspool antud funktsiooni.
Esmaklassiline funktsioon
„Esimese klassi funktsioon” on definitsioon, mis on omistatud programmeerimiskeele üksustele, mille kasutamisel pole piiranguid. Seega võivad esimese klassi funktsioonid esineda programmis kõikjal.
sulgemine
Sulgemine on sisemine funktsioon, mis pääseb juurde vanemfunktsiooni muutujatele isegi pärast vanemfunktsiooni käivitamist.
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 osalist rakendamist või sundtäitmist. See tehnika rakendab funktsiooni selle argumentidele ükshaaval, kusjuures 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 oma parameetrite põhjal. Need pole efektiivsed, kui need midagi ei tagasta. Lisaks pakuvad need antud parameetrite jaoks sama väljundit.
Näide:
Function Pure(a,b) { return a+b; }
Ebapuhtad funktsioonid
Ebapuhtad funktsioonid on puhaste funktsioonide täielik vastand. Neil on peidetud sisendid või väljundid ja seetõttu nimetatakse neid ebapuhasteks. Ebapuhtaid funktsioone ei saa kasutada ega testida isoleeritult, 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 olek on OOP-programmeerimises oluline mõiste. Põhimõtteliselt on see objektidele omaduste lisamine. Näiteks kui kõvaketas on objekt, saab omadustena lisada salvestusmahu ja ketta suuruse.
Kõrvaltoimed
Kõrvalmõjud on kõik oleku muutused, mis toimuvad väljaspool kutsutud funktsiooni. Mis tahes FP programmeerimiskeele suurim eesmärk on minimeerida kõrvalmõjusid, eraldades need ülejäänud tarkvarakoodist. FP programmeerimisel on oluline eemaldada kõrvalmõjud ülejäänud programmeerimisloogikast.
Funktsionaalse programmeerimise eelised
- Võimaldab vältida segadust tekitavaid probleeme ja vigu koodis.
- Lihtsam ühiktestimise ja FP silumise teostamine ja teostamine Code.
- Paralleelne töötlemine ja samaaegsus.
- Kuumkoodi juurutamine ja rikketaluvus.
- Pakub paremat modulaarsust lühema koodiga.
- Arendaja suurenenud tootlikkus.
- Toetab pesastatud funktsioone.
- Funktsionaalsed konstruktsioonid nagu Lazy Map & Lists jne.
- Võimaldab lambda-arvutuse efektiivset kasutamist.
Funktsionaalse programmeerimise piirangud
- Funktsionaalse programmeerimise paradigma pole lihtne, seega on algajatel seda raske mõista.
- Raske hooldada, kuna kodeerimise käigus areneb palju objekte.
- Vajab palju pilkamist ja ulatuslikku keskkonna seadistamist.
- Taaskasutamine on väga keeruline ja vajab pidevat ümbertegemist.
- 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 imperatiivset programmeerimismudelit. |
| See keskendub küsimusele: „Mida te programmis teete.“ | See keskendub järgmisele: „Kuidas te oma programmeerimist teete.“ |
| Toetab paralleelset programmeerimist. | Paralleelprogrammeerimise tugi puudub. |
| Selle funktsioonidel pole kõrvaltoimeid. | 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 mõlemat kõhulihasttractsioon andmete üle” ja „Abs”trackäitumine. | Toetab ainult kõhulihaseidtracüle andmete”. |


