Regiono (programlingva)
En programlingvoj, regiono[1] estas tiu parto de la teksto de komputila programo, kie validas deklaro de nomo (precipe de nomo de loka objekto) kaj kie oni rajtas uzi la nomon lau tiu deklaro.
Videblejo
[redakti | redakti fonton]La deklaroj konigas nomojn al sia regiono kaj al ties subregionoj (la regionoj povas ingigi); oni diras, ke per la nomo oni povas vidi gian deklaron.
La parto de la teksto de programo, kie deklaro videblas per nomo per gi deklarita estas gia videblejo.
Tamen povas okazi, ke nomo n deklarita per deklaro D0 en iu regiono R0 ricevas alian signifon per nova deklaro D1 en gia subregiono R1. Tiam la nova deklaro eklipsas la deklaron D0 (por la nomo n), kaj en la regiono R1 por la nomo n validos la deklaro D1. Tio signifas, ke la regionon R1 necesas <
Vivdauro
[redakti | redakti fonton]Dum plenumo de programo (dum rultempo) kreigas kaj detruigas kopioj, au ekzempleroj de la regionoj; iuj objektoj (la <
Kuntekstoj statika kaj dinamika
[redakti | redakti fonton]La ci-supra difino de videblejo (au videblo) uzas la nocion subregiono; nu, ekzistas du malsamaj manieroj arangi la hierarkion de la regionoj, kaj sekve, du malsamaj arangoj de la videblejoj, au kuntekstoj por determini, kiu deklaro validas por apero de nomo:
- Kunteksto statika (angle lexical scope, static binding): la subregionoj estas tekstaj partoj de la (difino de) sia superregiono; loka nomo ne validas ekster la teksto de sia regiono.
- Kunteksto dinamika (angle dynamic scope, dynamic binding): nomo videblas dum la vivdauro de la regiono kie gi estas deklarita; la regionoj estas arangitaj kiel stakkadroj en la plenumstako, kaj por nomo el la pinta kadro validas la deklaro de tia nomo el plej proksima stakkadro.
Por la <
function g () { echo $x ; x=2 ; }
function f () { local x=3 ; g ; }
f # cu ehigos 1 au 3?
echo $x # cu ehigos 1 au 2?
La funkcio g() eligas kaj revalorizas la variablon x, kiu por g() estas neloka variablo; t.e. necesas rilatigi gin al deklaro el superregiono de g().
- Se la programlingvo, al kiu apartenas ci tiu programo, uzas statikajn kuntekstojn (kiel pliparto da tradukataj lingvoj) tiam la nomo
xene deg()estas la mallokax. Tiamg(), vokite elf(), printos la komencan valoron de tiu mallokax, poste gi gin revalorizos, kaj tiu nova valoro estos eligita el la lasta linio de la programo. T.e. la programo eligos 1, kaj poste 2. La komencvalorizox=3ene def()tiun eligajon neniel influos, car tiu lokaxestas videbla nek en la regiono malloka, nek ene deg(). - Se la programlingvo uzas la dinamikajn kuntekstojn (kiel la pliparto da lingvoj interpretataj, kaj interalie Bash, al kiu fakte apartenas la ekzempla programo), tiam la nomo
xene deg()rilatos al la loka variabloxdef(), carg()estos vokita elf()kaj tial estas gia subregiono (en la plenumstako la stakkadro deg()situas sur la stakkadro def()). Tialg()eligos la lokan variablonx=3def()kaj gin revalorizos -- kio neniel influos la mallokanx-on; do, la programo eligos 3 kaj 1.