- Základné myšlienky
- vlastnosti
- Čisté funkcie
- Prvotriedne funkcie
- Referenčná transparentnosť
- rekurzia
- nemeniteľnosť
- Príklady
- Imperatívne a deklaratívne prístupy
- Čisté funkcie
- Funkcie ako prvotriedne objekty
- výhoda
- Kratšie a ľahšie pochopiteľné
- Žiadny regulačný tok
- nevýhody
- aplikácia
- Funkčná metodika
- Jazyky, ktoré podporujú funkčné programovanie
- D
- Erlang
- Haskell
- ML
- Cieľ Caml
- systém
- Referencie
Tieto funkčné programovací zodpovedá programovania vzoru je založený na koncepte uvedením správanie programu ako funkčné matematický model, skôr než explicitné sekvenciami inštrukcií do procesora, čo je hlavný koncept v záväznými programovania.
Funkčný jazyk kladie dôraz skôr na výroky a výrazy ako na vykonávanie výrokov. V tomto programovaní bude výsledok závisieť iba od parametrov, ktoré sa odovzdajú funkcii, na rozdiel od iných typov, ktoré sa riadia miestnym alebo globálnym stavom.

Schéma fungovania funkcie mapovania vo funkčnom programovacom jazyku Haskell. Zdroj: Autor: Pluke - Vlastná práca, CC0 commons.wikimedia.org.
Jeho názov vychádza z matematických funkcií, ktoré sú priradením množiny vstupov množine výstupov. Matematická funkcia v skutočnosti nevykonáva žiadnu prácu, ale skôr popisuje model procesu a pomocou vzorca vysvetľuje, čo množina vstupov vytvára vo funkcii.
Základné myšlienky
Základom funkčného programovania bol lambda kalkul, ktorý bol vyvinutý v tretej dekáde 20. storočia na definovanie a aplikáciu funkcií. LISP bol prvý programovací jazyk svojho druhu, navrhnutý v roku 1960.
Hoci väčšina programovacích jazykov pozostáva zo vstupov, výstupov a externých premenných, ktoré je možné nastaviť alebo použiť z funkcií, funkčné programovanie sa tomu vyhýba. Myšlienka je, že zakaždým, keď sa funkcia volá s rovnakými parametrami, mala by vrátiť rovnakú hodnotu.
vlastnosti
Funkčné programovacie jazyky sa nazývajú aplikácie, pretože funkcie sa uplatňujú na ich parametre, ako aj na deklaratívne a neprocedurálne, pretože definície určujú, čo sa má vypočítať a nie ako sa počíta.
Čisté funkcie
Funkcia je čistá, ak nemá žiadne pozorovateľné vedľajšie účinky, napríklad zmenu vonkajších premenných, zmeny systému súborov a tak ďalej.
Tieto funkcie sa považujú za presvedčivé, pretože nebudú výslovne meniť žiadne premenné, na ktorých by v určitom okamihu mohli závisieť ďalšie časti kódu. Zdalo by sa trápne kódovať týmito obmedzeniami, ale tieto funkcie by sa mali považovať za deterministické, predvídateľné a skladateľné.
Prvotriedne funkcie
Funkcie sa považujú za hodnoty, ktoré je možné priradiť premenným, takže ich možno odovzdať a vrátiť z iných funkcií. To znamená, že funkciu možno použiť, akoby išlo o parameter alebo ako hodnotu, ktorá sa vracia.
To znamená, že funkciu je možné odovzdať ako takú, a nie iba ako výsledok funkcie. Napríklad zvážte funkciu double (x), ktorá vracia dvojnásobok hodnoty vstupného parametra. Dvojitá (2) by teda vrátila 4.
Pretože ide o funkciu prvej triedy, kód (dvojitý (dvojitý) (2)) by bol rovnaký ako dvojitý (4) kód, čo vám umožňuje vnoriť jednu funkciu ako parameter inej, atď.
Referenčná transparentnosť
Poukazuje na skutočnosť, že v tomto programovacom modeli neexistujú žiadne príkazy na priradenie. To znamená, že ak chcete uložiť ďalšie hodnoty, musíte definovať nové premenné. Stav premennej je preto stále konštantný.
Tým sa eliminuje najmenšia možnosť nežiaducich účinkov, pretože ľubovoľnú premennú je možné nahradiť jej skutočnou hodnotou počas ktoréhokoľvek bodu vykonávania programu.
rekurzia
Vo funkčnom programovaní neexistujú slučky typu „for“ a „while“. Namiesto toho sa iterácia spolieha na rekurziu. Rekurzia sa realizuje pomocou rekurzívnych funkcií, ktoré sa opakujú, až kým sa nedosiahne základný prípad.
nemeniteľnosť
Premenné sú nemenné, to znamená, že po inicializácii nie je možné modifikovať premennú. Aj keď môžete vytvoriť novú premennú, zmena existujúcich premenných nie je povolená.
Príklady
Imperatívne a deklaratívne prístupy
Na príklade môžete analyzovať rozdiel medzi týmito prístupmi a vykonať rovnakú operáciu v oboch usporiadaniach, čo znamená filtrovať nepárne čísla zo zoznamu a nahradiť 5 za párne čísla menšie ako 5.

Je to rovnaký výpočet s rovnakým výsledkom. Ako však vidíte, imperatívny kód je podrobný a nie je okamžite jasný. Na druhej strane je deklaratívny prístup čitateľný a explicitný, pretože sa zameriava na to, čo chcete získať.
Čisté funkcie
To, čo sa definuje ako čisté a nečisté funkcie, je možné objasniť pomocou niekoľkých základných príkladov:

Funkcie ako prvotriedne objekty
Znamená to používať funkcie rovnakým spôsobom, ako sa používajú údaje. Preto ich možno preniesť ako parametre do inej funkcie. V nasledujúcom príklade môže byť funkcia int odovzdaná ako parameter do mapovej funkcie:
>>> zoznam (mapa (int,))
Môžu byť priradené k premenným a vrátené. Napríklad v nasledujúcom kóde môžete priradiť funkciu hello_world a potom vykonať premennú ako funkciu.

výhoda
- Zamerajte sa na to, čo chcete dosiahnuť (deklaratívne) a nie na to, ako to dosiahnuť (imperatív).
- Neobsahujú príkazy na priradenie, takže keď sa premenným pridelí hodnota, už sa nebudú meniť. Preto funkčné programy neobsahujú žiadne vedľajšie účinky.
- Logický tok je jasný, pretože stav je menej rozptýlený a nie je implicitne modifikovaný.
- Podporuje koncepciu lenivého hodnotenia, čo znamená, že hodnota sa vyhodnocuje a ukladá iba v prípade potreby.
- Pretože čisté funkcie nemenia žiadny stav a sú úplne závislé od vstupu, sú ľahko zrozumiteľné. Návratová hodnota daná takými funkciami je rovnaká ako ich výsledok.
- Vzhľadom na povahu čistých funkcií, aby sa zabránilo zmene premenných alebo akýchkoľvek externých údajov, sa implementácia súbežnosti stane účinnou.
- K funkciám sa pristupuje ako k hodnotám, ktoré prechádzajú na iné funkcie ako parametre. To zlepšuje porozumenie a čitateľnosť kódu.
- Čisté funkcie berú parametre raz a vytvárajú tak nemenný výstup. Používanie nemenných hodnôt uľahčuje ladenie a testovanie.
Kratšie a ľahšie pochopiteľné
Sú kratšie a zrozumiteľnejšie ako imperatívy. Štúdie ukázali, že priemerná produktivita programátora v zmysle riadkov kódu je viac-menej rovnaká pre akýkoľvek programovací jazyk, čo sa premieta do vyššej produktivity.
Žiadny regulačný tok
Volanie funkcie nemôže mať iný účinok ako výpočet jej výsledku. Toto vylučuje hlavný zdroj chýb, čím sa stáva irelevantný aj príkaz na vykonanie, pretože žiadny vedľajší účinok nemôže zmeniť hodnotu výrazu a môže sa kedykoľvek vyhodnotiť.
Programátor je zbavený bremena stanovenia toku kontroly. Pretože výrazy je možné vyhodnotiť kedykoľvek, premenné môžu byť nahradené ich hodnotami.
Vďaka tejto autonómii sú funkčné programy viac matematicky zvládnuteľné ako bežné programy.
nevýhody
- Funkčná paradigma programovania nie je jednoduchá, preto je pre začiatočníka ťažké porozumieť.
- Je ťažké ho udržiavať, pretože počas kódovania sa vyvíja veľa objektov.
- V niektorých prípadoch zapisovanie čistých funkcií spôsobuje zníženie čitateľnosti kódu.
- Nezmeniteľné hodnoty v kombinácii s rekurziou môžu viesť k drastickému zníženiu výkonu systému.
- Opätovné použitie je veľmi komplikované a vyžaduje neustále refaktoring.
- Písanie programov rekurzívnym spôsobom namiesto použitia slučiek alebo slučiek môže byť veľmi skľučujúcou úlohou.
- Objekty nemusia predstavovať problém správne.
- Hoci písanie čistých funkcií je jednoduché, ich kombinovanie so zvyškom aplikácie a so vstupnými / výstupnými operáciami je dosť ťažké.
aplikácia
Programovanie umelej inteligencie sa vykonáva vo funkčných programovacích jazykoch a techniky umelej inteligencie sa sťahujú do aplikácií v skutočnom svete.
Vyniká aj pri implementácii komplexných matematických modelov. Z tohto dôvodu je jedným z hlavných spôsobov použitia funkčných jazykov tradične akademický jazyk. Je to užitočné pri vývoji spustiteľných špecifikácií a implementácii prototypov.
Mnoho funkčných jazykov vyniká aj pri implementácii paralelného spracovania. Je to kvôli jeho schopnosti využívať čisté funkcie, ktoré vždy vracajú rovnakú hodnotu bez ohľadu na to, v akom poradí sú vykonávané.
Funkčná metodika
WhatsApp používa programovací jazyk Erlang, ktorý sa riadi funkčným programovacím modelom, a umožňuje tak viac ako stovke svojich zamestnancov spracovávať údaje, ktoré patria približne 1,6 miliardám ľudí.
Ďalším dôležitým nositeľom funkčného programovacieho štýlu je Haskell. Používa ho Facebook vo svojom antispamovom systéme. Dokonca aj JavaScript, jeden z najčastejšie používaných programovacích jazykov, vychvaľuje vlastnosti dynamicky napísaného funkčného jazyka.
Jazyky, ktoré podporujú funkčné programovanie
D
Bol navrhnutý po C ++ a získal všetky svoje výhody, pričom odstránil svoje zistené slabé stránky z toho, že musí byť kompatibilný s C.
Erlang
Je vysoko škálovateľná a súbežná, vďaka čomu je ideálna pre telekomunikácie a ďalšie aplikácie, ktoré prijímajú obrovské množstvo údajov v nepredvídateľnom poradí.
Haskell
Jedná sa o čisto funkčný programovací jazyk, ktorý používa Lambdov počet.
ML
Používa sa v matematických, vedeckých, finančných, analytických a iných aplikáciách. Jednou z jeho silných stránok je vytváranie softvéru na spracovanie iných programov.
Cieľ Caml
Je to open source jazyk, ktorý je založený na Caml. Má tendenciu vytvárať veľmi ľahké programy, ktoré im pomáhajú načítať a bežať rýchlejšie ako programy vytvorené v iných jazykoch.
systém
Je založená na syntaxi LISP a štruktúre ALGOL. Kvôli svojej jednoduchosti sa používa v mnohých kurzoch informatiky ako úvod do návrhu programu, aby ukázal niektoré základy počítačového programovania.
Referencie
- Kto to hosťuje (2019). Naučte sa funkčné programovanie: Tento štýl kódovania vás bude fúkať. Prevzaté z: whoishostingthis.com.
- Andrea Bertoli (2019). Primeraný úvod do funkčného programovania. Prevzaté z: dev.to.
- Hacker Earth (2020). Funkčné programovanie. Prevzaté z: hackerearth.com.
- Clojure (2020). Funkčné programovanie. Prevzaté z: clojure.org.
- Akhil Bhadwal (2020). Funkčné programovanie: Koncepty, výhody, nevýhody a aplikácie. Hack. Prevzaté z: hackr.io.
- Guru99 (2020). Čo je funkčné programovanie? Výukový program s príkladom. Prevzaté z: guru99.com.
