function call

Üdvözlöm, Ön a function call szó jelentését keresi. A DICTIOUS-ban nem csak a function call szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a function call szót egyes és többes számban mondani. Minden, amit a function call szóról tudni kell, itt található. A function call szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Afunction call és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

function call (tsz. function calls)

  1. (informatika) A függvényhívás (angolul function call vagy function invocation) a számítógépes programozás egyik legalapvetőbb művelete. Lényege, hogy egy előre definiált függvényt a program adott pontján végrehajtatunk. A függvény lehet beépített, vagy általunk (vagy más fejlesztő által) definiált.

Amikor egy függvényt meghívunk, akkor ezzel utasítjuk a számítógépet, hogy:

  1. lépjen be a függvény kódjába,
  2. hajtsa végre a benne lévő utasításokat,
  3. opcionálisan adjon vissza egy eredményt a hívó fél számára (return),
  4. majd térjen vissza a hívás helyére és folytassa a program végrehajtását.



1️⃣ A függvény fogalma

Egy függvény egy programon belüli önálló egység, amely bizonyos bemenet(ek)et (paramétereket) vár, ezek alapján műveleteket végez, majd eredményt (return value-t) ad vissza vagy mellékhatást fejt ki (például kiír a képernyőre).

Általános céljai:

  • Kódujrahasználhatóság (reusability)
  • Olvashatóság növelése (readability)
  • Modularitás (modularity)
  • Karbantarthatóság (maintainability)

Példa C++ nyelven:

int add(int a, int b) {
    return a + b;
}

2️⃣ A függvényhívás általános szintaxisa

A függvényhívás általános formája:

függvénynév(argumentum1, argumentum2, ...);

A híváskor megadjuk a függvény nevét és a zárójelekben átadjuk a szükséges argumentumokat. Ekkor a következő történik:

  1. A vezérlés átkerül a függvény törzsébe.
  2. A függvényben lévő kód végrehajtódik.
  3. Ha van return utasítás, visszaadja az eredményt.
  4. A vezérlés visszatér a hívás helyére.

Példa hívás:

int result = add(3, 4); // result = 7

3️⃣ Hívási mechanizmus lépései

  1. A hívó függvény (caller) megszakítja a saját végrehajtását.
  2. Stack frame (veremkeret) jön létre a hívott függvény (callee) számára.
  3. A paramétereket a verembe helyezi (stack vagy CPU regiszterek segítségével).
  4. A callee végrehajtódik.
  5. Eredmény (ha van) visszakerül a caller-hez.
  6. A stack frame felszabadul.
  7. A caller folytatja végrehajtását.



4️⃣ Stack frame és hívási kontextus

Minden függvényhívás során létrejön egy stack frame, amely tartalmazza:

  • Paraméterek másolatát vagy referenciáját
  • Lokális változókat
  • Visszatérési címet (hogy hova térjen vissza a végén)
  • (esetleg) hívási kontextus egyéb információit

A stack frame a call stack-en helyezkedik el. Ha függvények egymást hívják, a stack mélysége növekszik.



5️⃣ A függvényhívás típusai

a) Paraméterek szerint

  • Érték szerinti átadás (pass by value): másolatot adunk át.
  • Referencia szerinti átadás (pass by reference): eredeti változót adjuk át.

b) Visszatérési érték szerint

  • Értéket visszaadó függvény (function with return value)
  • Void függvény (void function), amely nem ad vissza semmit.

c) Függvény típusa szerint

  • Szabad függvény (free function) — pl. C nyelvű printf.
  • Tagfüggvény (member function) — osztályokban (C++, Java, Python).
  • Lambda / névtelen függvény (lambda / anonymous function).



6️⃣ Függvényhívási példák több nyelven

C++

int multiply(int x, int y) {
    return x * y;
}

int main() {
    int result = multiply(5, 6); // 30
}

Python

def greet(name):
    print("Hello, " + name)

greet("Daniel")

JavaScript

function square(n) {
    return n * n;
}

let result = square(8); // 64

7️⃣ Függvényhívás futásidejű hatása

A függvényhívás során a CPU-nak a következőket kell tennie:

  1. Eltárolja a jelenlegi utasítás helyét (PC - program counter).
  2. Előkészíti a paramétereket.
  3. Ugrik a függvény kódjára (jump/call instruction).
  4. Lefuttatja a függvényt.
  5. Visszaugrik a caller-hez a korábban eltárolt cím alapján.

A függvényhívások hatással vannak a stack mélységére. Nagyon mély vagy végtelen rekurzió stack overflow-t okozhat.



8️⃣ Rekurzív függvényhívás

A rekurzió speciális eset, amikor egy függvény saját magát hívja.

Példa (faktoriális):

int factorial(int n) {
    if (n == 0) return 1;
    return n * factorial(n - 1);
}

Minden egyes rekurzív híváskor új stack frame keletkezik!



9️⃣ Függvényhívási konvenciók

Különböző processzorarchitektúrákon eltérő hívási konvenciók vannak, amelyek szabályozzák:

  • Hogy melyik CPU regiszterben vagy stack-en adjuk át a paramétereket.
  • Ki felel a stack tisztításáért (caller vagy callee).
  • Hol tároljuk a visszatérési értéket.

Példák:

  • cdecl (C deklarációs konvenció)
  • stdcall (Windows API)
  • fastcall (paraméterek CPU regisztereken keresztül)



1️⃣0️⃣ Függvényhívás optimalizációja

A modern fordítók számos optimalizációt végezhetnek a hívásokra:

  • Inline függvények: a hívás helyére a függvény kódját illesztik be.
  • Tail call optimization (TCO): ha egy függvény azonnal saját magát vagy másik függvényt hív visszatérésként, a stack frame újrafelhasználható.



1️⃣1️⃣ Összefoglaló

A függvényhívás:

✅ a programvezérlés egyik alapművelete, ✅ lehetővé teszi kód újrafelhasználását, ✅ paraméterek átadásával és visszatérési értékkel működik, ✅ stack frame-eket hoz létre, ✅ CPU szinten call és ret utasításokkal valósul meg, ✅ rekurzió és inline optimalizáció esetén külön figyelmet igényel.