Mi az a funkcionális programozás?
⚡ Okos összefoglaló
A funkcionális programozás a szoftverek fejlesztésének egy olyan módja, amely tiszta függvények komponálásával, a megosztott állapotok és a módosítható adatok kerülésével történik. A kifejezésekre helyezi a hangsúlyt az utasítások helyett, így egy függvény kimenete csak a bemeneteitől függ, ami a programokat kiszámíthatóvá és tesztelhetővé teszi.
Mi az a funkcionális programozás?
A funkcionális programozás (más néven FP) a szoftverfejlesztés egy olyan gondolkodásmódja, amely tiszta függvények létrehozásán alapul. Kerüli az objektumorientált programozásban megfigyelhető megosztott állapot és módosítható adatok koncepcióját.
A funkcionális nyelvek a kifejezéseket és deklarációkat hangsúlyozzák az utasítások végrehajtása helyett. Ezért, ellentétben más eljárásokkal, amelyek lokális vagy globális állapottól függenek, a funkcionális programozási nyelvek értékkimenete csak a függvénynek átadott argumentumoktól függ.
A funkcionális programozás jellemzői
- A funkcionális programozási módszer az eredményekre összpontosít, nem a folyamatokra.
- A hangsúly azon van, hogy mit kell kiszámolni.
- Az adatok megváltoztathatatlanok.
- A funkcionális programozás a problémát függvényekre bontja.
- A matematikai függvények koncepcióján alapul, amelyek feltételes kifejezéseket és rekurziót használnak a számítás elvégzéséhez.
- Nem támogatja az iterációt, mint a ciklusutasítások, és a feltételes utasításokat, mint az If-Else.
A funkcionális programozás története
- A funkcionális programozás alapja a Lambda-kalkulus. Az 1930-as években fejlesztették ki a funkcionális alkalmazások, definíciók és rekurziók számára.
- A LISP volt az első funkcionális programozási nyelv, amelyet McCarthy tervezett 1960-ban.
- A 70-es évek végén az Edinburgh-i Egyetem kutatói definiálták a metanyelvet (ML).
- A 80-as évek elején a Hope nyelv algebrai adattípusokkal bővült a rekurzió és az egyenletes gondolkodás számára.
- 2004-ben újították meg a funkcionális nyelvet, a Scala-t.
Funkcionális programozási nyelvek
Bármely FP nyelv célja a matematikai függvények utánzása. A számítás alapvető folyamata azonban eltér a funkcionális programozásban.
Íme néhány a legismertebb funkcionális programozási nyelvek közül:
- Haskell
- SML
- Clojure
- Scala
- Erlang
- Tiszta
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
Alapvető funkcionális programozási terminológia és Concepts
Megváltozhatatlan adatok
A megváltoztathatatlan adatok azt jelentik, hogy könnyen létrehozhatsz adatstruktúrákat a már létezők módosítása helyett.
Hivatkozási átlátszóság
A funkcionális programoknak úgy kell végrehajtaniuk a műveleteket, mintha először tennék. Így tudni fogjuk, hogy mi történhetett vagy nem történhetett a program végrehajtása során, és milyen mellékhatásai voltak. Funkcionális programok nyelvén ezt referenciális átláthatóságnak nevezik.
A modularitás
A moduláris felépítés növeli a termelékenységet. A kisebb modulok gyorsan kódolhatók, és nagyobb az esélyük az újrafelhasználásra, ami minden bizonnyal a programok gyorsabb fejlesztéséhez vezet. Emellett a modulok külön is tesztelhetők, ami segít csökkenteni az egységtesztelésre és a hibakeresésre fordított időt.
Karbantarthatóság
A karbantarthatóság egy egyszerű fogalom, ami azt jelenti, hogy az FP programozás könnyebben karbantartható, mivel nem kell aggódni amiatt, hogy véletlenül bármit is megváltoztatunk az adott függvényen kívül.
Első osztályú funkció
Az „első osztályú függvény” egy olyan programozási nyelvi entitásokra vonatkozó definíció, amelyek használatára nincs korlátozás. Ezért az első osztályú függvények a programban bárhol megjelenhetnek.
Bezárás
A lezárás egy belső függvény, amely hozzáférhet a szülőfüggvény változóihoz, még a szülőfüggvény végrehajtása után is.
Magasabb rendű funkciók
A magasabb rendű függvények vagy más függvényeket vesznek fel argumentumként, vagy eredményként adják vissza őket.
A magasabb rendű függvények részleges alkalmazásokat vagy curryinget tesznek lehetővé. Ez a technika egy függvényt egyesével alkalmaz az argumentumaira, és minden alkalmazás egy új függvényt ad vissza, amely elfogadja a következő argumentumot.
Tiszta funkció
A „tiszta függvény” olyan függvény, amelynek bemenetei bemenetként vannak deklarálva, és egyiket sem szabad elrejteni. A kimenetek is kimenetként vannak deklarálva.
A tiszta függvények a paramétereikre hatnak. Nem hatékonyak, ha nem adnak vissza semmit. Sőt, ugyanazt a kimenetet kínálják az adott paraméterekre.
Példa:
Function Pure(a,b) { return a+b; }
Tiszta funkciók
A tisztátalan függvények pontosan az ellentétei a tiszta függvényeknek. Rejtett bemenetekkel vagy kimenetekkel rendelkeznek, ezért nevezzük őket tisztátalannak. A tisztátalan függvények nem használhatók vagy tesztelhetők elszigetelten, mivel függőségekkel rendelkeznek.
Példa
int z; function notPure(){ z = z+10; }
Funkció Összetétel
A függvényösszetétel 2 vagy több funkció kombinálása egy új létrehozásához.
Megosztott államok
A megosztott állapot fontos fogalom az OOP programozásban. Alapvetően tulajdonságok hozzáadását jelenti objektumokhoz. Például, ha egy merevlemez egy objektum, akkor a tárolókapacitás és a lemezméret hozzáadható tulajdonságként.
Side Effects
A mellékhatások minden olyan állapotváltozás, amely a meghívott függvényen kívül történik. Bármely FP programozási nyelv legfőbb célja a mellékhatások minimalizálása azáltal, hogy elkülöníti azokat a szoftverkód többi részétől. Az FP programozásban létfontosságú, hogy a mellékhatásokat eltávolítsuk a programozási logika többi részéből.
A funkcionális programozás előnyei
- Lehetővé teszi a zavaró problémák és hibák elkerülését a kódban.
- Könnyebb az egységtesztelés és az FP hibakeresése és tesztelése Code.
- Párhuzamos feldolgozás és párhuzamosság.
- Forró kód telepítése és hibatűrés.
- Jobb modularitást kínál rövidebb kóddal.
- A fejlesztő fokozott termelékenysége.
- Támogatja a beágyazott függvényeket.
- Funkcionális konstrukciók, például Lusta térkép és listák stb.
- Lehetővé teszi a Lambda-kalkulus hatékony használatát.
A funkcionális programozás korlátai
- A funkcionális programozási paradigma nem könnyű, ezért a kezdők számára nehéz megérteni.
- Nehéz karbantartani, mivel sok objektum fejlődik a kódolás során.
- Sok gúnyolódást és kiterjedt környezeti beállítást igényel.
- Az újrafelhasználás nagyon bonyolult, és folyamatos refaktorálást igényel.
- Előfordulhat, hogy az objektumok nem megfelelően ábrázolják a problémát.
Funkcionális programozás vs. objektum-orientált programozás
| Funkcionális programozás | OOP |
|---|---|
| Az FP megváltoztathatatlan adatokat használ. | Az OOP változó adatokat használ. |
| Deklaratív programozáson alapuló modellt követ. | Imperatív programozási modellt követ. |
| Amire összpontosít, az a következő: „Mit csinálsz a programban?” | Amire összpontosít, az a következő: „Hogyan csinálod a programozást.” |
| Támogatja a párhuzamos programozást. | Nincs támogatás a párhuzamos programozáshoz. |
| Funkcióinak nincsenek mellékhatásai. | Egy módszer számos mellékhatást okozhat. |
| Az áramlásvezérlés funkcióhívásokkal és rekurziós függvényhívásokkal történik. | Az áramlásvezérlési folyamat ciklusok és feltételes utasítások segítségével történik. |
| A kijelentések végrehajtási sorrendje nem túl fontos. | Fontos az állítások végrehajtási sorrendje. |
| Támogatja mindkét „hasizom” izmáttrac„Adatok feletti nézet” és „Abszolút”trac„A viselkedés feletti hatalom.” | Csak a „hasizom” támogatását támogatjatrac„az adatok feletti védelem”. |


