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!
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.
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.
"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?
"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.
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?
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).
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.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!