Kezdőoldal » Számítástechnika » Programozás » Ha egy függvény önmagát hívja...

Ha egy függvény önmagát hívja meg közvetetten, az hatással lehet a saját maga változójának értékére? Többi lent!

Figyelt kérdés

Java-ról van szó. Pl:


void fuggveny(){

boolean a = true;

....számítások, amit befolyásolják az "a" értékét.

fuggveny2();

}


void fuggveny2(){

.....

fuggveny();

}


A valóságban persze mindkét függvény bonyolultabb, és számításokat tartalmaz.

Tehát a konkrét kérdés az, hogy ha a fuggveny2() meghívódik az ábrázolt helyen, és az meghívja a fuggveny()-t, akkor ez a második fuggveny() hívódás hatással tud lenni a legelső fuggveny()-beli "a"-ra, vagy csak a saját maga béli "a" értékét tudja módosítani és nem okoz gubancot a dolog? Nem tudom az mennyit számít, hogy Java-ról van szó jelen esetben.



#Java #függvény #érték #változó #meghívja #módosíthatja
2020. máj. 26. 11:48
1 2
 11/20 anonim ***** válasza:
89%

Jól érted.

Két egymásba ágyazott számláló ciklus esetén a belső ciklus látja a külső változóit, de fordítva ez nem igaz. Tehát a belső ciklus szempontjából a külső ciklus változói globálisnak hatnak, a külső ciklus szempontjából a belső ciklus változói lokálisak.

Viszont a szóhasználatod nem egészen pontos. A két ciklus külön hatáskörnek (scope) számít, mivel minden blokk egy hatáskör. Tehát a számláló ciklus, az elől - és hátultesztelő ciklus, a metódus, az osztály ... blokkjai mind-mind külön hatáskört jelölnek ki.

De persze nem úgy, mint a függvényhívásnál, az más.

2020. máj. 26. 14:15
Hasznos számodra ez a válasz?
 12/20 anonim ***** válasza:
100%
Nem. A {...} jelölnek egy szkópot, amit azon belül definiálsz az lokális lesz. Pl {int a = 3;} a = 4; syntax error lesz, mert 'a' sosem volt definiálva a szkópon kívül, így hozzá se férhetsz azon kívül. A lényeg, hogy a {} nem a for ciklus vagy a metódus része, önmagukban is jelentése van.
2020. máj. 26. 14:20
Hasznos számodra ez a válasz?
 13/20 anonim ***** válasza:

"Két egymásba ágyazott számláló ciklus esetén a belső ciklus látja a külső változóit, de fordítva ez nem igaz"


Ezt mégis, hogy?

2020. máj. 26. 14:32
Hasznos számodra ez a válasz?
 14/20 anonim ***** válasza:
51%

"Ezek alapján akkor két pl for ciklus, vagy más ciklus egymásba ágyazva nem számít külön hatáskörűnek, ha jól értem, csak a függvényekre igaz ez."


Igen, így van. A függvények változói azért lokálisak, mert nem léteznek a függvény meghívása előtt és utána sem. A meghíváskor jönnek létre, a stacken és ha a függvény visszatér a hívóhoz akkor a stackből ezek a változók ki lesznek pucolva.


Ez azért van így, hogy a függvény a stacken tárol, mert a függvények hívása opcionális. Van úgy, hogy meg vannak hívva, sokszor, van úgy, hogy nincsenek. Amíg nincsenek meghívva, addig minek egyék a memóriát, nem? Na meg, így igazán optimális.

2020. máj. 26. 14:40
Hasznos számodra ez a válasz?
 15/20 anonim ***** válasza:

#13 "Ezt mégis, hogy?"


???

2020. máj. 26. 14:47
Hasznos számodra ez a válasz?
 16/20 anonim ***** válasza:

függvény ()

{

ciklus A = 0 to 9 {


ciklus B = 0 to 6 {a * b}


print A,B

}

}


Tehát szerinted fenti esetben a print függvény hibával fog visszatérni, mert 'A' ciklus nem látja a 'B' ciklus változóját, így nem is képes azt átadni a print függvénynek?

2020. máj. 26. 14:58
Hasznos számodra ez a válasz?
 17/20 anonim ***** válasza:

Te, milyen pszeudokód ez? :D

A kisbetűs és nagybetűs változóneveket ne keverd már össze-vissza...


Nem hogy a print függvény hibával tér vissza, hanem le sem fordul a kód, mert a compiler "cannot find symbol" hibára hivatkozva nem fogja lefordítani (amennyiben még mindig Javaról beszélünk).

2020. máj. 26. 15:07
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:
100%

Javaul:

1 -- for (int i = 0; i < 10; i++) {

2 ---- for (int j = 0; j < 10; j++) {

3 ------ System.out.println(j);

4 ------ System.out.println(i);

5 ---- }

6 ---- System.out.println(j);

7 ---- System.out.println(i);

8 -- }


A 6. sornál "cannot find symbol" hibát kapunk.

2020. máj. 26. 15:10
Hasznos számodra ez a válasz?
 19/20 anonim ***** válasza:
OK. Most nézem, valóban Javaról van szó, ezt a kérdező ki is hangsúlyozta, de elkerülte a figyelmemet. Ebben az esetben (JAVA!) igazad van. Elnézést kérek.
2020. máj. 26. 15:14
Hasznos számodra ez a válasz?
 20/20 anonim ***** válasza:
Ha nem Javaról lenne szó, hanem pl. Javascriptről, akkor neked lenne igazad, mert ott a blokk nem határoz meg új scope-ot. De Java-ban igen, és ha jól tudom, C/C++/C#-ban is.
2020. máj. 26. 15:17
Hasznos számodra ez a válasz?
1 2

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!