Helyi változó

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2016. február 20-án áttekintett verziótól ; az ellenőrzések 13 szerkesztést igényelnek .

A programozásban a lokális változó egy kódblokkon belül deklarált változó . Egy lokális változó hatóköre a deklaráció pontján kezdődik és ennek a blokknak a végén ér véget [1] [2] . Például C -ben a függvényben vagy blokkban deklarált változók lokálisak (C-ben a blokkokat kapcsos zárójelek { és } választják el) [3] .

Vannak olyan programozási nyelvek, amelyekben egy lokális változót csak függvényben lehet deklarálni, mivel ezekben a nyelvekben a blokkban deklarált helyi változót ennek a blokknak a közvetlen helyének függvényében deklarálják.

Szervezet a memóriában

A helyi változókat a legtöbb nyelven a hívási verem tárolja [4] . Ez azt jelenti, hogy ha egy függvény rekurzívan hívja meg magát, akkor a változókat minden alkalommal újra létrehozzák, és lefoglalják a személyes memóriát, ahelyett, hogy ugyanarra a helyre írnák őket.

Korlátozások

A helyi változót csak az operációs rendszer vagy a számítógép által a verem számára lefoglalt memória mennyisége korlátozza.

Az algol-szerű nyelvek lehetővé teszik a blokkok tetszőleges nagy egymásba ágyazását, és mindegyiknek megvan a saját helyi változója.

Hatókör

A lokális változók lehetővé teszik a rekurziót [5] .

A lokális hatókör változóit a globális változóknál előforduló mellékhatások elkerülésére használják.

Az érték szerinti hívást használó programozási nyelvek minden szubrutinnak a helyi változók helyi hatókörét adják a neki átadott argumentumok helyi másolatával.

A lokális változó bármely függvényparaméter (például a C nyelvben), amely nem használ hivatkozásokat vagy mutatókat.

Statikus helyi változók

A statikus változók egy speciális típusú helyi változók, amelyek számos népszerű nyelven elérhetők (beleértve a c / c ++-t, a Visual Basic-et, a VB.NET-et), amelyek lényege, hogy ez a változó minden függvényhívásban megtartja értékét. És minden hívásban pontosan ugyanaz lesz, mint a függvény törzsének bezárásakor [6] előtt .

localPerlben

A Perlnek van egy kulcsszava locala változók „lokalizálására”, de ebben az esetben localez nem azt jelenti, amit a legtöbben várnának. [2] Korlátozott élettartamú, de a globális névtérben található ideiglenes változót hoz létre. Ez lehetővé teszi, hogy ezt a változót bármely, ebből a blokkból meghívott függvényben megtekinthesse. Lexikális változók létrehozásához, amelyek inkább automatikus változók, használja a my. Ennek megértéséhez vegye figyelembe a következő kódot:

$a = 1 ; sub f () { local $a ; $a = 2 ; g (); } sub g () { print "$a\n" ; } g (); f (); g ();

Eredmény:

egy 2 egy

ez egy globális változónévvel történik, amely $aa függvényben létrehozott új ideiglenes változóra kezd mutatni f(), de a globális érték visszaáll a -ból való kilépéskor f(). Ha myebben az esetben helyette használjuk local, az 1-et ír ki háromszor, mivel ebben az esetben a változó $avalóban lokális lenne a függvényhez f(), és nem látható g(). Emiatt sokan úgy gondolják, hogy az operátornak localmás nevet kell adni, például save. [5]

Helyi változók a Rubyban

A Rubyt mint nyelvet szintén a Perl ihlette, de ebben az esetben a jelölést egyszerűbbé tették: a globális változó neve előtt $ jelnek kell lennie, például $változó_neve, míg a lokális változónak egyszerűen nincs $ jel a neve előtt, például változó_neve (míg Perlben minden skalár érték előtt $ van).

Példa a helyi változók használatára C-ben

#include <stdio.h> int a = 0 ; // globális változó int main () { printf ( "%d" , a ); // a 0-s szám jelenik meg { int a = 1 ; // az a lokális változó deklarálva van, az a globális változó nem látható printf ( "%d" , a ); // az 1-es szám jelenik meg { int a = 2 ; // továbbra is lokális változó a blokkban, az a globális változó nem látható, és az előző lokális változó nem látható printf ( "%d" , a ); // a 2-es szám jelenik meg } } }

Kiadja:

012

Jegyzetek

  1. Helyi változók . Hozzáférés időpontja: 2013. február 26. Az eredetiből archiválva : 2013. augusztus 4..
  2. Példa 22-8. A lokális változók köre . Letöltve: 2013. február 26. Az eredetiből archiválva : 2013. február 16..
  3. Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. 1.6.3 Statikus hatókör és blokkstruktúra // Fordítók : alapelvek, technikák és eszközök. - 2. kiadás - Williams, 2008. - S.  62 . — 1184 p. - ISBN 978-5-8459-1349-4 .
  4. Helyi változók . - "Alapértelmezés szerint a helyi változók a veremben vannak tárolva." Hozzáférés időpontja: 2013. február 26. Az eredetiből archiválva : 2013. augusztus 4..
  5. 22.2.1. A lokális változók lehetővé teszik a rekurziót. . Letöltve: 2013. február 26. Az eredetiből archiválva : 2013. február 16..
  6. Statikus változók (lefelé irányuló kapcsolat) . Hozzáférés dátuma: 2013. február 26. Az eredetiből archiválva : 2013. január 30.