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