Kezdőoldal » Számítástechnika » Programozás » A függvények miben különböznek...

A függvények miben különböznek a goto vezérlési szerkezetektől?

Figyelt kérdés
Egy függvény végülis arra szolgál, hogy többször ugyanazt a kódot felhasználjuk, erre szolgált a goto is, akkor miért van az, hogy a goto-t kerülendő használni, a függvényeket meg nem?

2019. máj. 3. 11:36
 1/6 anonim ***** válasza:
100%

Egy függvény (illetve egy eljárás) lefutása után a kód a függvényt (vagy eljárást) meghívó kód utáni utasításokat hajtja végre. A goto esetén ha ezt akarjuk elérni, akkor egy újabb goto-t kell alkalmazni, ami nehezen áttekinthetővé teszi a kódot.


Egy függvénynek (illetve egy eljárásnak) adhatsz meg paramétereket - goto esetén ehhez globális változókat kell felhasználnod.


Egy függvény (illetve egy eljárás) magján belül használhatsz lokális változókat, amelyek a program magjából nem érhetőek el. Goto esetén ez nem alkalmazható.

2019. máj. 3. 12:57
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
100%

Ahogy #1-es írta, a függvénynek vannak olyan extra tulajdonságai, mint pl. lokális változók, amik nem ütköznek a felettes szinten lévő változónevekkel, és (alap esetben) megszűnnek a kilépéskor.

A másik, hogy a függvényhívás hardver szinten van támogatva, és garantálja, hogy a hívási pont után fog folytatódni a végrehajtás. Ez nem is igazán függ a programozótól, tuti oda fog visszaugrani a végrehajtás. GOTO-val erre nincs garancia, és spagetti kód lehet belőle.

A harmadik a paraméter kezelés. Egy függvény paraméterei az ő saját lokális változói lesznek, nem kell magasabb szinten deklarálni, vagy egyéb csavarokat megtenni, hogy ne ütközzön más adatokkal. (Ld. pl. rekurzív híváskor is minden híváshoz külön paraméter adatok tartoznak.) Ezt GOTO-val macerás megoldani, és poetnciális hibaforrás.

2019. máj. 3. 14:12
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
100%
A goto és a függvényhívás olyanynira különböznek, hogy Assembly szinten is két külön fogalomról van szó (jmp vs call). A goto, vagy jmp, semmi mást nem csinál, csak a megadott labelre, programrészre ugrik, és onnan folytatódik a futás. A call esetében azonban eltárolódik az aktuális futási pont, átugrik a megadott végrehajtási pontra, és a visszatérést követően visszaugrik a hívó pontjára, ugyanonnan folytatva a futást. Illetve, noha ez Assembly szintjén nincs garantálva, de a magasabb szintű nyelveknél rendszerint biztosítva van, hogy a függvények 'rendet raknak maguk után', vagyis a stack pozíciója a függvényhívás előtt és után változatlan marad. A függvény futása során létrehozott memóriabejegyzések (lokális változók) a függvény végén kivételre kerülnek a veremből, ezzel segítve azt, hogy a program többi részének ne kelljen azzal foglalkoznia, hogy a meghívott függvény miket csinált a veremben, abban az állapotban kapja vissza, ahogy azt a hívás előtt hagyta.
2019. máj. 3. 14:27
Hasznos számodra ez a válasz?
 4/6 Alex Fly ***** válasza:

Ha a BASIC nyelv goto-jára gondolszb az egy egyszerű feltétel nélküli ugróutasítás. Átgondolt programszerkesztéssel nincs rá szükség.

A függvények inkább a gosub-return párossal definiált szubrutinokra hasonlítanak.

2019. máj. 4. 01:32
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
A függvények különálló egységek is, melyek áttekinthetőbbé teszik a kódot. A goto inkább összekuszálja, nehezebb látni, hogy mit csinál a kód.
2019. máj. 4. 07:41
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Herbert Schildt C++ referenciakönyvében esett szó arról, hogy gotot érdemes használni egymásba ágyazott ciklusokból való kilépéshez. Ez igaz?
2019. máj. 4. 10:28

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!