10. Procedúrák, függvények¶
A procedúrák és függvények a korábbi témákban már tárgyalásra kerültek. Aktuálisan a programozási nyelvekben jellemző implementációjukat tekintjük át.
Procedúrák¶
Bizonyos nyelvekben/környezetekben szubrutinoknak is szokták őket nevezni.
A kapcsolatot a program többi részével a paramétereiken keresztül tartják.
Hogy ha valamilyen eredményt is vissza kell adnia, akkor a paraméterek között azok címként jelennek meg.
Függvények¶
Úgy tekintjük, hogy a meghívott függvény maga is egy érték.
A matematikai értelemben vett függvényeknek
nincs olyan paramétere, amely kimenetként szolgál,
bármennyiszer is hívjuk meg őket ugyanazon paraméterezésre, mindig ugyanazt az értéket kapjuk,
nem okoznak mellékhatást a program többi részében.
Megjelenési formáik
A programozási nyelvek változatosan használnak procedúrát és/vagy függvényeket.
Van olyan, amelyikben mindkettő van, és van olyan, amelyekben csak az egyik. (Nagyon régi, vagy egyszerű nyelvek esetében előfordulhat, hogy egyik sem.)
Az érték átadásának lehetséges módjai¶
Paraméterezésen keresztül
Elérhető (tipikusan globális) változón keresztül
Paraméter azonosítása¶
A híváskor feltüntetett értékeket argumentumoknak nevezzük. Az argumentumok paraméterekhez rendelésének változatos módjai vannak.
Pozíció szerint: Ez tekinthető a tipikus megoldásnak.
Név szerint: Magasabb szintű nyelvek támogatják tipikusan (főként egyenlőség jel megadásával, például
x=8
).Név egyezőség szerint: Feltételezi, hogy a hívó és a függvény/procedúra névterében azonos néven szerepel a változó. Manapság már nagyon ritka (szerencsére).
Érték átadása¶
Az argumentumként megadott értékeknek valahogyan át kell jutnia a függvény/procedúra névterébe. Erre az alábbi módok állnak rendelkezésre.
Érték szerinti átadás
Cím szerinti átadás (szokás még referencia szerintinek is nevezni)
Figyelem
A C++ programozási nyelvben a referencia és a cím az külön típus.
Függvény, mint érték¶
Bizonos nyelvekben a függvényt, mint objektumot is lehet kezelni, paraméterként át lehet adni.
λ-kalkulus¶
Alonso Church, 1930.
A \(\lambda\)-kalkulus a legkisebb univerzális programozási nyelv
A nyelv szintaktikája (Backus-Naur Forma)
<expression> ::= <name> | <function> | <application>
<function> ::= 'λ' <name> '.' <expression>
<application> ::= <expression> <expression>
A nyelv két kulcsszava a
λ`
és a.
(pont).Zárójelezés használható a kifejezések körül.
A függvényeknek nem adunk nevet, hanem helyett magát a függvény definícióját írjuk bele.
Az identikus függvény:
λx.x
Az identikus függvény az y
-ra alkalmazva:
(λx.x) y
Az előbbi alkalmazás szintén egy λ-kifejezés.
A benne szereplő
x
kötött változó kötött.Az
y
változója szabad változó.
Példa aritmetikai kifejezésekkel:
Church egészek:
0 := λs.λz.z
1 := λs.λz.(s z)
2 := λs.λz.(s (s z))
3 := λs.λz.(s (s (s z)))
Ebben a
z
a 0 (zero) értékre utal.Az
s
a rákövetkező értékre (successor).
forrás:
Kérdések¶
Az argumentumként kapott értékeket hogyan lehet paraméterhez rendelni?
Melyek az előnyei és a hátrányai a cím és az érték szerinti paraméterátadásnak?