functional programming (tsz. functional programmings)
A funkcionális programozás (angolul: functional programming) egy programozási paradigma, amelyben a programokat függvények kombinációjaként írjuk meg. Ezek a függvények matematikai értelemben vett tiszták, azaz nincsenek mellékhatásaik, és nem módosítanak állapotot. A funkcionális programozás az algoritmusokat és adattranszformációkat helyezi a középpontba, nem az utasításokat és a vezérlést.
Ez a szemlélet szorosan kapcsolódik a lambda-kalkulushoz, amely a 20. században a formális logika részeként jött létre, és ma is a funkcionális nyelvek matematikai alapját képezi.
map
, filter
, reduce
)
Funkcionális nyelv | Jellemzők |
---|---|
Haskell | Tiszta, erősen típusos, lazy értékelés |
Lisp / Scheme | Reprezentatív funkcionális nyelvcsalád |
OCaml / F# | Funkcionális + imperatív hibrid |
Erlang | Elosztott rendszerekhez, párhuzamos |
Elixir | Modern nyelv, Erlangra épül |
Scala | Java-kompatibilis, funkcionális és objektumorientált is |
Python, JavaScript | Támogat funkcionális elemeket (pl. map , lambda )
|
def square(x):
return x * x
map
numbers =
squared = list(map(lambda x: x * x, numbers))
def sum_recursive(lst):
if not lst:
return 0
return lst + sum_recursive(lst)
square x = x * x
sumList = 0
sumList (x:xs) = x + sumList xs
Előny | Magyarázat |
---|---|
Könnyen tesztelhető | A tiszta függvények kiszámíthatók. |
Párhuzamos végrehajtásra alkalmas | Mivel nincs osztott állapot. |
Rövidebb, elegánsabb kód | A magasabb rendű függvények és immutabilitás révén. |
Nincs mellékhatás | Így kevesebb rejtett hiba lehetőség. |
Matematikai alaposság | Könnyebb formális ellenőrzés, verifikáció. |
Hátrány | Magyarázat |
---|---|
Nehéz lehet megszokni | Imperatív gondolkodásmód után nehéz váltani. |
Lassabb lehet bizonyos esetekben | Mivel új értékeket hozunk létre (memóriahasználat). |
Rekurziók korlátai | Stack overflow veszélye hosszú rekurzióknál. |
Kevés ipari tapasztalat | Az imperatív paradigmák dominálnak a piacon. |
Függvény | Működés |
---|---|
map(f, L)
|
Alkalmazza az f függvényt a L lista elemeire.
|
filter(f, L)
|
Csak azokat az elemeket tartja meg, amelyekre f(x) igaz.
|
reduce(f, L)
|
Egyesíti az elemeket az f függvénnyel (összeg, szorzat stb.).
|
zip(L1, L2)
|
Összepárosítja a két listát. |
lambda x: ...
|
Névtelen függvény. |
Paradigma | Jellemző |
---|---|
Imperatív | Lépésről lépésre utasításokat ad (pl. C, Python) |
Objektumorientált | Osztályok, objektumok, öröklés, kapszulázás |
Funkcionális | Függvények, deklaratív leírás, tiszta működés |
apply
, map
)
A funkcionális programozás egy matematikai alapokra épülő, tiszta, deklaratív szemlélet, amely lehetővé teszi, hogy a programokat függvények kompozíciójaként kezeljük. Ez a megközelítés hatékony a hibamentes, párhuzamos, újrafelhasználható és könnyen karbantartható szoftverek írásához. Noha ipari alkalmazása kevésbé elterjedt, mint az objektumorientált programozásé, a funkcionális elemek egyre inkább megjelennek hibrid nyelvekben és modern szoftverkeretrendszerekben.