Funkcionális programozás
Mi az a Funkcionális Programozás?
- Olyan programozási paradigma, ahol a program függvények kompozíciójából épül fel.
- Függvények fogadnak adatot, és visszaadnak adatot
- Pure Functions - Olyan függvények, ami nem tárolnak állapotot, és nem változtatják meg a bejövő adatokat - nincs mellékhatás
- A kimenet kizárólag a bemenettől függ, a korábban futó kódnak nincs kihatása rá
- Állapot és működés szeparálva van (legtöbbször), OOP-val ellentétben, ahol egy egységbe van zárva
Fogalmak
- Legfontosabb adatstruktúra - Lista
- Head - Fej - A lista első eleme
- Tail - Farok - A lista az első elem nélkül
- Rekurzió - Olyan függvény ami önmagát hívja meg
- Immutable - konstans - olyan adat ami nem változtatja meg értékét
- Pattern Matching - minta illesztés
Előnyök
- Concurrency - Mivel mindenki csak olvasni tudja az adatot, nem fordulhat elő, hogy két függvény össze akad, vagy verseny helyzet alakulna ki
- Egyszerűbb tesztelés - Mivel nincs változó adat, nincs állapot, elegendő az inputot előkészíteni, az output mindig helyes kell, hogy legyen
- Újra felhasználható, mivel nincs külső függőség, egyszerűbb mozgatni
- Rövidebb programok
Hátrányok
- Memória igény, mivel minden objektum másolva van
- Nem annyira elterjedt mint az OOP
- Tömör ami nem mindig olvasható
- Nem a legeffektívebb a CPU teljes kiaknázására az adatstruktúrák megvalósítása végett
Funkcionális nyelvek
- Lisp és az összes variációja
- Haskell
- Scala, F#
- Erlang, Elixir
Funkcionális programozás nem funkcionális nyelvekben
- Új nyelvek már támogatják többnyire ezt
- Függvények mint First-Class Citizen
- Python is támogatja
- lambda
- függvény pointerek
- rekurzió (nincs tail-recursion)
Iterátor
L = [1, 2, 3]
it = iter(L)
it
<...iterator object at ...>
it.__next__() # same as next(it)
1
next(it)
2
next(it)
3
next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
For
for i in iter(obj):
print(i)
for i in obj:
print(i)
Comprehension
# Generator expression -- returns iterator
stripped_iter = (line.strip() for line in line_list)
# List comprehension -- returns list
stripped_list = [line.strip() for line in line_list]
Irodalomjegyzék
- Wikipedia - Functional programming
- Youtube - Functional Programming in 40 Minutes • Russ Olsen • GOTO 2018
- Youtube - 4 Programming Paradigms In 40 Minutes
Funkcionális prog
By Imre Secodi
Funkcionális prog
- 53