Mi az a funkcionális programozás? Oktatóanyag példával
Mi az a funkcionális programozás?
A funkcionális programozás (más néven FP) egyfajta gondolkodásmód a szoftverek felépítéséről, tiszta függvények létrehozásával. Kerüli az objektum-orientált programozásban megfigyelt megosztott állapot, változtatható adatok fogalmait.
A funkcionális nyelvek inkább a kifejezésekre és deklarációkra helyezik a hangsúlyt, nem pedig az utasítások végrehajtására. Ezért, ellentétben más eljárásokkal, amelyek helyi vagy globális állapottól függenek, az FP kimeneti értéke 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 folyamatra
- A hangsúly azon van, hogy mit kell kiszámítani
- Az adatok megváltoztathatatlanok
- Funkcionális programozás Bontsa fel a problémát függvényekre
- A matematikai függvények koncepciójára épül, amely feltételes kifejezéseket és rekurziót használ a számítás elvégzéséhez
- Nem támogatja az iterációt, például a ciklusutasításokat és a feltételes utasításokat, mint például 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 funkcionális alkalmazásra, meghatározásra és rekurzióra
- A LISP volt az első funkcionális programozási nyelv. McCarthy tervezte 1960-ban
- A 70-es évek végén az Edinburghi Egyetem kutatói meghatározták az ML-t (Meta Language)
- A 80-as évek elején a Hope nyelv algebrai adattípusokat ad hozzá a rekurzióhoz és az egyenletekhez
- 2004-ben a „Scala” funkcionális nyelv innovációja.
Funkcionális programozási nyelvek
Bármely FP nyelv célja a matematikai függvények utánzása. A számítás alapfolyamata azonban más a funkcionális programozásban.
Íme néhány legjelentősebb funkcionális programozási nyelv:
- 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étrehozhat adatstruktúrákat a már meglévő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 végeznének. Így tudni fogja, mi történhetett vagy nem a program végrehajtása során, és milyen mellékhatásai vannak. Az FP kifejezésben Referenciális transzparenciának hívják.
A modularitás
A moduláris felépítés növeli a termelékenységet. A kis modulok gyorsan kódolhatók, és nagyobb esélyük van az újrafelhasználásra, ami minden bizonnyal a programok gyorsabb fejlesztéséhez vezet. Ezen kívül a modulok külön-külön is tesztelhetők, ami segít csökkenteni az egységtesztre és a hibakeresésre fordított időt.
Karbantarthatóság
A karbantarthatóság egy egyszerű kifejezés, ami azt jelenti, hogy az FP programozást könnyebb karbantartani, mivel nem kell attól tartania, hogy az adott funkción kívül bármit véletlenül megváltoztat.
Első osztályú funkció
Az „első osztályú függvény” egy olyan definíció, amelyet olyan programnyelvi entitásoknak tulajdonítanak, amelyek használatukra nincs korlátozás. Ezért az első osztályú függvények bárhol megjelenhetnek a programban.
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ű funkciók részleges alkalmazásokat vagy curryinget tesznek lehetővé. Ez a technika egy függvényt egyenként alkalmaz az argumentumaira, mivel 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ékony, ha nem ad vissza semmit. Sőt, ugyanazt a kimenetet kínálja az adott paraméterekhez
Példa:
Function Pure(a,b) { return a+b; }
Tiszta funkciók
A tisztátalan funkció pontosan a tiszta ellentéte. Rejtett bemenettel vagy kimenettel rendelkeznek; tisztátalannak nevezik. A tisztátalan függvények nem használhatók vagy tesztelhetők elszigetelten, mivel függőségeik vannak.
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 állapotok fontos fogalmak az OOP programozásban. Alapvetően tulajdonságok hozzáadása az 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 olyan állapotváltozások, amelyek a hívott függvényen kívül lépnek fel. Bármely FP programozási nyelv legnagyobb célja a mellékhatások minimalizálása azáltal, hogy elválasztja őket a szoftverkód többi részétől. Az FP programozásban Létfontosságú, hogy távolítsa el a mellékhatásokat a programozási logika többi részéből.
A funkcionális programozás előnyei
- Lehetővé teszi, hogy elkerülje a zavaró problémákat és hibákat a kódban
- Könnyebben tesztelhető és végrehajtható az egységteszt és az FP kód hibakeresése.
- Párhuzamos feldolgozás és párhuzamosság
- Hot code telepítés és hibatűrés
- Jobb modularitást kínál rövidebb kóddal
- A fejlesztő termelékenységének növekedése
- Támogatja a beágyazott funkciókat
- Funkcionális konstrukciók, például Lusta térkép és listák stb.
- Lehetővé teszi a Lambda Calculus 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únyos és kiterjedt környezeti beállítást igényel
- Az újrafelhasználás nagyon bonyolult, és folyamatos átdolgozást igényel
- Előfordulhat, hogy az objektumok nem ábrázolják megfelelően 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. | Követi a kötelező programozási modellt. |
Amire összpontosít: „Amit csinálsz. a programban.” | Amire összpontosít, az a „Hogyan csinálod a programozást”. |
Támogatja a párhuzamos programozást. | Nem támogatja a párhuzamos programozást. |
Funkcióinak nincs mellékhatása. | A 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 az „Adatok feletti absztrakciót” és az „Absztrakciót a viselkedés felett” egyaránt. | Csak az „Adatok feletti absztrakciót” támogatja. |
Következtetés
- A funkcionális programozás vagy az FP egy olyan gondolkodásmód a szoftver felépítéséről, amely néhány alapvető meghatározó elven alapul
- A funkcionális programozási koncepciók az eredményekre összpontosítanak, nem a folyamatra
- Bármely FP nyelv célja a matematikai függvények utánzása
- Néhány legjelentősebb funkcionális programozási nyelv: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- 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 megváltoztathatatlan adatok azt jelentik, hogy könnyen létrehozhat adatstruktúrákat a már meglévők módosítása helyett
- Lehetővé teszi, hogy elkerülje a zavaró problémákat és hibákat a kódban
- A funkcionális kód nem könnyű, ezért a kezdők számára nehéz megérteni
- Az FP megváltoztathatatlan adatokat, míg az OOP változtatható adatokat használ