A számítástechnika , a hatálya alá ( terjedelem angol) egy azonosító terjed, ahol ezt az azonosítót kapcsolódik. Ez a kör lehet lexikális vagy dinamikus.
A lexikális hatókört a forráskód egy része határozza meg. Ezen a részen belül az azonosítónak csak egy linkje van.
A globális azonosító az egész forráskódhoz kapcsolódik (néha csak annak deklarálása vagy meghatározása után). Számos programozási nyelvben minden függvény globális hatókörű (például: C). Amikor egy globális hatókörű azonosító változót jelöl, akkor globális változóról beszélünk . Ezeket általában hasznos terheléses adatok tárolására használják a program több helyén, egy speciális eset a zárak.
A helyi hatókörű azonosító csak a nyelv szintaktikai felépítésén belül van összekapcsolva, általában azzal, amelyben deklarálják. Amikor egy lokális hatókörű azonosító változót jelöl, akkor helyi változóról beszélünk . Sőt, a legtöbb nyelvben a helyi hatókörű azonosító elrejti az azonos nevű, de nagyobb hatókörű azonosítókat. Ugyanazon azonosító kétszeri deklarálása ugyanazon hatókörben hibának vagy újból deklarációnak tekinthető, a nyelvtől és a kontextustól függően.
Példa a sémára :
REPL> (define foo 42) ; la variable globale foo contient la valeur 42 REPL> foo ; accès à la variable foo 42 REPL> (let ((foo -1)) ; ouverture d'une forme let où est définie une variable locale foo qui contient la valeur -1 foo) ; fin de la forme let, qui renvoie la valeur de la variable foo -1 REPL> foo ; accès à la variable foo 42A lexikális hatókör elvét először a LISP 1.5-ben vezették be. Hozzáadták az Algol 60-hoz, amelynek leszármazottai jellemzően csak lexikális dongák ( C , Pascal ). A rendszer , amely promóter volt, egy Lisp-dialektus, amelynek szintén csak lexikális hatóköre van. A Common Lisp viszont rendelkezik mind a Scheme-ből importált lexikai hatókörökkel, mind dinamikus hatókörökkel.
A dinamikus hatókört egy dinamikus hatókör határozza meg, amelyet futás közben egy belépési és egy kilépési pont határol. A dinamikus hatókörű azonosító megkötése elrejt egy korábbi kötést az alakzat dinamikus kiterjedésén belül, amely ezt az új kötést teszi. A dinamikus hatókörű, dinamikus változónak nevezett változót tehát arra használják, hogy a módosítást a hívásveremben lévő környezetbe terjesszék.
Példa a Common Lisp-ben:
CL-USER> (defvar *foo* 42) ; définition d'une variable à portée dynamique *foo* contenant la valeur 42 *FOO* CL-USER> (defun return-foo () ; définition d'une fonction renvoyant la valeur de *foo* *foo*) RETURN-FOO CL-USER> (return-foo) ; accès à la variable *foo* 42 CL-USER> (let ((*foo* -1)) ; ouverture d'une forme let re-liant *foo* à la valeur -1, (return-foo)) ; dont l'exécution constitue l'étendue dynamique de cette liaison -1 CL-USER> (return-foo) ; accès à la variable *foo* 42És ugyanez a példa a sémában, dinamikus hatókör nélkül:
REPL> (define foo 42) REPL> (define (return-foo) foo) REPL> (return-foo) 42 REPL> (let ((foo -1)) (return-foo)) ; ici l'exécution de return-foo accèdera à la variable foo dans sa portée lexicale 42 REPL> (return-foo) 42A nem funkcionális nyelvek támogatják a dinamikus hatókört is, nevezetesen azokat, amelyek a Forth-ból (verem nyelv) származnak, beleértve a PostScript-t is . Az alkalmazott módszer egy második verem használata (függetlenül a paraméterkötegtől vagy a függvény visszatérési veremtől, a két halom gyakran közös), amely minden egyes halmozott pozícióhoz tartalmaz egy hivatkozást egy változók szótárára. Ha egy változó nem található a verem tetején hivatkozott első szótárban, a keresés folytatódik a verem alsó részén található szótár (ak) ban.
Minden változószótárat általában hash-tábla modellez az optimális keresési idő elérése érdekében az egyes szótárakban (a keresési idő szinte függetlenné válik a szótárban tárolt változók számától). Ehhez a változó nevét numerikus keresőkulcsokká alakítják, amelynek összes információbitjét egyenlően elosztják hash függvény segítségével; ezt a numerikus billentyűt ezután a hash tábla méretének intervallumára redukáljuk, hogy megkapjuk a változó tárolási helyét. Mivel ütközések lehetségesek, a hash tábla minden egyes pozícióban tartalmazza a változó nevének mindkét bejegyzését (annak érdekében, hogy egyenlőséggel ellenőrizhessük, hogy a megfelelő változó van-e tárolva). Ezután különböző stratégiák léteznek az azonos kiszámított kulcsot használó változók ütközésének megoldására:
A PostScript és a Forth egyedülálló abban az értelemben, hogy az összes szótár (amelyre a hatóköri veremben hivatkozunk) önmagában is megnevezhető változók, amelyek akár közvetlenül használhatók, akár a nevük alapján is kereshetők, a személyzet veremében is keresettek, mielőtt a referenciát megszereznék, amelyet aztán a személyzet veremébe lehet rakni. Ezért ezekben a nyelvekben nincs fenntartott változónév, az összes előre definiált objektumnévre valójában egy olyan sávban van hivatkozás, amely soha nem üres, de legalább egy első "rendszer" hatókörű szótárra hivatkozik, amely tartalmazza a saját hivatkozását és saját nevét. Ezenkívül lehetőség van bizonyos változók szelektív eltávolítására az összes későbbi hatókörfelbontásból, eltávolítva azok referenciáit a hatókörben hivatkozott szótárak egyikében (ez lehetővé teszi egy adott hatókörszintű bizonyos változók elrejtését a változó későbbi használatához alacsonyabb hatókörben meghatározott). Az egyik bejegyzést lecserélheti egy másikra is (a kezdeti hatókörben definiált változó már nem érhető el ott, de helyettesít egy másik nevet ugyanazzal a névvel, de valószínűleg más típusú, ezáltal teljesen hozzáférhetetlenné teheti a rendszerváltozó, amelyet el akarunk rejteni).
A névkört nem csak az értékek tárolására és hivatkozására szolgáló nyelvek számára tartják fenn. A legtöbb hierarchikus fájlrendszerben megtalálható az elérhető fájlnevek különböző nézeteinek bemutatása is. Csak a régebbi, nagyon egyszerű fájlrendszerek, amelyek csak egy szótárt tartalmaznak a fájlnevekről a teljes rendszer számára (és a rendszer által üzemeltetett összes folyamatra), csak egy hatókört támogatnak a fájlnevek számára (a on azonban kiterjesztésük szerint is használhatja, további szótárak tárolásával) nevek fájlként).