06. Lokális, globális változók, láthatóság, paraméterátadás

Default book

Lokális, Globális és statikus változók

Ha egy program írása során mindig minden változót használnunk kellene / lehetne, akkor a korábban megfogalmazott változónév adási módszereink csődöt mondanának.

Alapszabály, hogy egy változó abban a programblokkban létezik, amelyikben deklaráltuk. Ez az élettartama.

Változó láthatósága azt a programrészt jelenti, ahonnan a változó értékét elérjük, esetleg módosíthatjuk.

Globális változóról beszélünk, ha a változó értékét a program minden pontjáról el tudjuk érni.

A C# teljesen globális változót nem tud használni, ezért a mindenhonnan elérhető változókat itt statikus változóknak hívjuk, ami azt jelenti, hogy a változó értéke akkor érhető el, ha a program futása éppen abban a blokkban zajlik, ahol a statikus deklaráció zajlott. A programozás tanulása során statikus változókra nem nagyon lesz szükség, a valóságban persze szükségesek.

Lokális változóról beszélünk, ha a változó csak a program egy meghatározott blokkjában létezik. Ha egy függvényben vagy egy metódusban (majd később elmondom, hogy mi az) deklarálunk egy változót, akkor az lokális és csak abban a blokkban / függvényben / metódusban használható, ahol létrehoztuk. Ha egy osztályban (már megint mi ez?) mindenhol akarunk használni egy változót, akkor az osztály fej részében kell azt létrehozni.

A továbbiakban eljárásnak hívok minden metódust, függvényt és visszatérési érték nélküli eljárást.

Paraméterek

A metódusok, függvények a programozás során kérhetnek és kaphatnak adatokat olyan programrészekből, amelyek őket meghívják. Az metódusoknak átadott adatok paraméterek formájában kerülnek át. A paraméterátadással mindig két helyen kell foglalkoznunk.

Amikor meghívunk egy eljárást, akkor paramétereket adunk át az eljárásnak.

kiiratas(10, 15);

Amikor definiálunk egy metódust, akkor egyúttal meghatározzuk azt is, hogy milyen paramétereket vár a program. Ekkor meg kell adnunk azt is, hogy hány darab és milyen típusú paramétert adunk át. Ilyenkor az eljárás paramétereket vesz át.

Érték szerinti paraméterátadás

Amikor egy eljárásnak, függvénynek vagy metódusnak csak egy változó vagy konstans értékét akarjuk átadni, akkor a változó eredeti tartalmáról készül egy másolat és az eljáráson belül ezt a másolatot használjuk. Ez egyúttal azt is jelenti, hogy az eljáráson belül bármilyen módosítást végzünk a paraméteren az eljárás befejeződése után a változás elveszik.

Magyarázat

Képzeljük el, hogy egy iroda ajtajában megjelenik egy küldönc, aki egy pecsétes, aláírt papíron üzenetet hoz az irodába, de nem adja oda a papírt, hanem csak egy másolatot ad a bent tartózkodóknak. Ekkor az eredeti papír tartalma továbbra is változatlan lesz, de a másolattal a teremben azt csinálnak, amit akarnak, mert az nem kerül ki.

A leggyakrabban érték szerinti paraméterátadást használunk. Ilyenkor az átadott értékeket egy vagy több változóban veszi át a meghívott eljárás. az átvevő vááltozókat formális paramétereknek hívjuk. Az eljárás fejében típusokkal megjelölve, vesszővel eválasztva kell őket írnunk.

static void kiiratas(int a, int b){
  Console.WriteLine( a + b);
}

​A formális paraméterek felsorolása egyúttal változódeklaráció is. Az eljáráson belül ugyanilyen nevű másik változót nem lehet létrehozni.

Az érték szerinti paraméterátadás megvalósítása a különböző programnyelvekben

Ha egy eljárást meghívunk érték szerinti paraméterekkel, amikor a program belép a függvény deklarációs részébe, akkor az érték szerint átadott paraméterek értékeivel lokális változók jönnek létre az eljárás által használt veremben és utána az eljáráson belül az így létrejött verem tartalmát használja a program.

Ahogyan korábban írtam, amikor az eljárás befejezi a munkáját, vagyis kilép a kódblokkból a verem területe felszabadul, tehát az ott lévő értékek elvesznek.

Cím szerinti paraméterátadás

Cím szerinti paraméterátadás esetén a hívó programkód a meghívott eljárásnak átadja a változó helyét a memóriában.