- Alapvető ötletek
- jellemzők
- Tiszta funkciók
- Első osztályú szolgáltatások
- Referencia átláthatóság
- rekurzió
- Állandóság
- Példák
- Imperatív és deklaratív megközelítések
- Tiszta funkciók
- Első osztályú objektumokként működik
- Előny
- Rövidebb és könnyebben érthető
- Nincs ellenőrző áramlás
- hátrányok
- Alkalmazások
- Funkcionális módszertan
- A funkcionális programozást támogató nyelvek
- D
- Erlang
- Haskell
- ML
- Objektív Caml
- Rendszer
- Irodalom
A mintaprogramozásnak megfelelő funkcionális programozás azon a felfogáson alapul, hogy a program viselkedését funkcionális matematikai modellként határozza meg, nem pedig a processzor számára adott utasítások sorozata helyett, amely a legfontosabb fogalom a kötelező programozásban.
A funkcionális nyelv az állításokat és a kifejezéseket hangsúlyozza, nem pedig az utasítások végrehajtása helyett. Ebben a programozásban az eredmény csak a függvény paramétereitől függ, ellentétben a helyi vagy globális állapotot engedelmeskedő más típusokkal.

A térképezési funkció működésének diagramja a Haskell funkcionális programozási nyelven. Forrás: Pluke - Saját munka, CC0 commons.wikimedia.org.
A neve a matematikai függvényekből származik, amelyek egy bemeneti halmaz hozzárendelése a kimenetek halmazához. A matematikai függvény nem valósít meg semmiféle munkát, hanem egy folyamat modelljét írja le, egy képlettel elmagyarázva, hogy egy bemeneti halmaz milyen funkciót produkál.
Alapvető ötletek
A funkcionális programozás alapja a lambda calculus volt, amelyet a 20. század harmadik évtizedében fejlesztettek ki a függvények meghatározására és alkalmazására. A LISP volt az első ilyen jellegű programozási nyelv, amelyet 1960-ban fejlesztettek ki.
Noha a legtöbb programozási nyelv bemenetekből, kimenetekből és külső változókból áll, amelyeket a funkciókon belül lehet beállítani vagy használni, a funkcionális programozás ezt elkerüli. Az ötlet az, hogy minden alkalommal, amikor egy függvényt ugyanazokkal a paraméterekkel hívnak, ugyanazzal az értékkel kell visszatérnie.
jellemzők
A funkcionális programozási nyelveket alkalmazásoknak nevezzük, mert a függvényeket alkalmazzuk a paramétereikre, valamint a deklaratív és a nem eljárási paraméterekre, mivel a definíciók meghatározzák, hogy mit kell számolni, és nem azt, hogyan kell kiszámítani.
Tiszta funkciók
A funkció akkor tiszta, ha nincs megfigyelhető mellékhatása, mint például a külső változók megváltoztatása, a fájlrendszer változásai és így tovább.
Ezeket a funkciókat meggyőzőnek tekintik, mivel nem változtatják meg kifejezetten azokat a változókat, amelyektől a kód más részei valamikor függhetnek. Kemény lenne ezeket a korlátozásokat kódolni, de ezeket a funkciókat determinisztikusnak, kiszámíthatónak és összeállíthatónak kell tekinteni.
Első osztályú szolgáltatások
A függvényeket olyan értékeknek tekintik, amelyek a változókhoz hozzárendelhetők, így átadhatók és visszatérhetnek más funkciókhoz. Vagyis egy függvény úgy használható, mintha egy paraméter lenne, vagy egy visszatérő értékként.
Ez azt jelenti, hogy a függvény mint ilyen átadható, nem csupán a függvény eredménye. Például vegye figyelembe a dupla (x) függvényt, amely kétszer adja vissza a bemeneti paraméter értékét. Így a dupla (2) 4-et eredményez.
Mivel ez egy első osztályú függvény, a kód (dupla (dupla (2)) megegyezik a dupla (4) kóddal. Ez lehetővé teszi, hogy az egyik funkciót egy másik paraméterének fészkeljék stb.).
Referencia átláthatóság
Arra utal, hogy ebben a programozási mintában nincsenek hozzárendelési utasítások. Vagyis meg kell határoznia az új változókat, ha további értékeket szeretne tárolni. Ezért a változó állapota állandó.
Ez kiküszöböli a nemkívánatos hatások legkisebb lehetőségét, mivel a változó bármilyen valós értékével helyettesíthető a program végrehajtásának bármely pontján.
rekurzió
A funkcionális programozásban nincs "for" és "while" hurok. Ehelyett az iteráció a rekurzióra támaszkodik. A rekurziót rekurzív függvényekkel valósítják meg, amelyek ismételten hívják magukat, amíg el nem érik az alapesetet.
Állandóság
A változók változatlanok, azaz nem lehet módosítani a változót, miután inicializálták. Bár létrehozhat egy új változót, a meglévő változók módosítása nem engedélyezett.
Példák
Imperatív és deklaratív megközelítések
Példaként elemezheti a megközelítések közötti különbséget, és elvégezheti ugyanazt a műveletet mindkét elrendezésben, azaz a páratlan számokat kiszűrheti egy listáról, miközben az 5-et pótolja az 5-nél kevesebb számmal.

Ugyanaz a számítás, ugyanazzal az eredménnyel. Mint láthatja, a kötelező kód szóbeszéd és nem azonnal egyértelmű. Másrészt a deklaratív megközelítés olvasható és explicit, mivel arra koncentrál, amit meg akar kapni.
Tiszta funkciók
A tiszta és tiszta funkciók meghatározása néhány alapvető példával tisztázható:

Első osztályú objektumokként működik
Ez azt jelenti, hogy a funkciókat ugyanúgy kell használni, mint az adatokat. Ezért paraméterekként továbbadhatók egy másik függvényhez. A következő példában az int függvény paraméterként átadható a térkép funkciónak:
>>> lista (térkép (int,))
A változókhoz hozzárendelhetők és visszaadhatók. Például a következő kódban hozzárendelheti a hello_world függvényt, majd végrehajthatja a változót függvényként.

Előny
- Összpontosítson arra, amit el szeretne érni (deklaratív), és nem arra, hogyan lehet elérni (kötelező).
- Nem tartalmaznak hozzárendelési nyilatkozatokat, tehát miután a változók megkaptak egy értéket, már nem változnak. Ezért a funkcionális programok nem tartalmaznak semmilyen mellékhatást.
- A logikai folyamat egyértelmű, mivel az állapot kevésbé van szórva, és nincs implicit módon módosítva.
- Támogatja a lusta értékelés fogalmát, amely azt jelenti, hogy az értéket csak szükség esetén értékelik és tárolják.
- Mivel a tiszta funkciók nem változtatnak meg egyetlen állapotot sem, és teljesen függnek a bemenettől, könnyen érthetők. Az ilyen funkciók által megadott visszatérési érték megegyezik az általuk előállított eredménnyel.
- A tiszta függvények jellegéből adódóan annak elkerülése érdekében, hogy a változók vagy bármilyen külső adat megváltozzon, a párhuzamosság megvalósítása hatékony.
- A funkciókat értékként kezeljük, és paraméterekként továbbadjuk más funkciókra. Ez javítja a kód megértését és olvashatóságát.
- A tiszta funkciók egyszer veszik a paramétereket, és változatlan outputot eredményeznek. A megváltoztathatatlan értékek használata megkönnyíti a hibakeresést és a tesztelést.
Rövidebb és könnyebben érthető
Rövidebbek és könnyebben érthetők, mint a kényszerítők. A tanulmányok kimutatták, hogy a programozók átlagos termelékenysége a kódsorok vonatkozásában többé-kevésbé megegyezik bármely programozási nyelvvel, ami magasabb termelékenységet eredményez.
Nincs ellenőrző áramlás
Funkció meghívása nem lehet más hatással, mint az eredmény kiszámítása. Ez kizárja a hibák egyik fő forrását, és a végrehajtási sorrendet is lényegtelenné teszi, mivel egyetlen mellékhatás sem változtathatja meg egy kifejezés értékét, és bármikor kiértékelhető.
A programozó megszabadul az ellenőrzési folyamat kialakításának terheitől. Mivel a kifejezéseket bármikor ki lehet értékelni, a változókat helyettesíthetjük értékükkel.
Ez az autonómia a funkcionális programokat matematikailag jobban kezelhetővé teszi, mint a hagyományos programok.
hátrányok
- A funkcionális programozási paradigma nem egyszerű, ezért a kezdő számára nehéz megérteni.
- Nehéz fenntartani, mivel sok objektum fejlődik a kódolás során.
- Egyes esetekben a tiszta függvények írása csökkenti a kód olvashatóságát.
- A változtathatatlan értékek a rekurzióval kombinálva drasztikusan csökkenthetik a rendszer teljesítményét.
- Az újrafelhasználás nagyon bonyolult és állandó refaktorozást igényel.
- A ciklusok vagy hurkok használata helyett a rekurzív stílusú programok írása nagyon félelmetes lehet.
- Lehet, hogy az objektumok nem jelzik helyesen a problémát.
- Noha a tiszta funkciók írása egyszerűnek bizonyul, meglehetősen nehéz kombinálni őket az alkalmazás többi részével és a bemeneti / kimeneti műveletekkel.
Alkalmazások
A mesterséges intelligencia programozása funkcionális programozási nyelveken zajlik, a mesterséges intelligencia technikák pedig a valós alkalmazásokba kerülnek.
Kiválóan bonyolult matematikai modellek megvalósításában is. Ezért a funkcionális nyelvek egyik fő felhasználási területe hagyományosan akadémiai volt. Hasznos végrehajtható specifikációk és prototípus-megvalósítások kidolgozásához.
Számos funkcionális nyelv szintén kiemelkedik a párhuzamos feldolgozás megvalósításában. Ennek oka annak a képessége, hogy kihasználja a tiszta funkciókat, amelyek mindig ugyanazt az értéket adják vissza, függetlenül a végrehajtás sorrendjétől.
Funkcionális módszertan
A WhatsApp az Erlang programozási nyelvet használja, amely követi a funkcionális programozási modellt, így több mint száz alkalmazottja kezeli mintegy 1,6 milliárd ember adatait.
A funkcionális programozási stílus másik fontos hordozója a Haskell. A Facebook használja a spam-ellenes rendszerében. Még a JavaScript, az egyik legszélesebb körben használt programozási nyelv, a dinamikus típusú funkcionális nyelv tulajdonságait rejti.
A funkcionális programozást támogató nyelvek
D
A C ++ után fejlesztették ki, és az összes előnye elnyeri az előnyeit, miközben kiküszöböli annak megfigyelt gyengeségeit, hogy a C-vel kompatibilisnek kell lennie.
Erlang
Nagyon skálázható és párhuzamos, így ideális olyan távközlési és egyéb alkalmazások számára, amelyek kiszámíthatatlan sorrendben nagy mennyiségű adatot vesznek.
Haskell
Ez egy tiszta funkcionális programozási nyelv, amely a Lambda calculus-t használja.
ML
Matematikai, tudományos, pénzügyi, analitikai és egyéb alkalmazásokban használják. Az egyik erőssége a szoftverek készítése más programok kezelésére.
Objektív Caml
Ez egy nyílt forráskódú nyelv, amelynek alapja a Caml. Nagyon könnyű programokat hoz létre, segítve őket a többi nyelv által létrehozottnál gyorsabb betöltésben és futtatásban.
Rendszer
A LISP szintaxisán és az ALGOL struktúrán alapul. Egyszerűségének köszönhetően számos informatika kurzuson alkalmazzák a programtervezés bevezetéseként, hogy megmutassák a számítógépes programozás néhány alapját.
Irodalom
- Ki üzemelteti ezt (2019). Ismerje meg a funkcionális programozást: Ez a kódolási stílus fújja elméjét. Forrás: whoishostingthis.com.
- Andrea Bertoli (2019). A funkcionális programozás megfelelő bevezetése. Forrás: dev.to.
- Hacker Earth (2020). Funkcionális programozás. Forrás: hackerearth.com.
- Clojure (2020). Funkcionális programozás. Feltöltve: clojure.org.
- Akhil Bhadwal (2020). Funkcionális programozás: Fogalmak, előnyök, hátrányok és alkalmazások. Csapkod. Feltöltve: hackr.io.
- Guru99 (2020). Mi a funkcionális programozás? Bemutató a példával. Forrás: guru99.com.
