Skoop

Enamus imperatiivseid keeli on nn plokistruktuuriga, s.t. neis kasutatakse mooduleid, funktsioone, alamprogramme jne, millel on oma, "sisemised" muutujad, mida ei saa kasutada (nad pole "nähtavad") nende kasutamisalast väljaspoole; samasugune muutujate "peitmine" toimub objekt-orienteeritud keeltes (Java). Muutuja "nähtavusala" nimetatakse muutuja skoobiks. Nähtavusala arvestamise reeglid on erinevates programmeerimiskeeltes veidi erinevad, kuid tavaliselt kehtib nn "rusikareegel", et sisemises (alam-) moodulis või funktsioonis deklareeritud muutuja muudab kõik sellest üldisemad (kõrgematel tasemetel deklareeritud) sama nimega (sama identifikaatoriga) muutujad nähtamatuteks, kuid ta ise pole kõrgematel tasemetel enam nähtav. Näiteks järgnev C-keeles kirjutatud programmilõik:

 
static int out; /* tase 0 */
int x;
void test(a,b);
int a, b; /* tase 1 */
{ int c;
{ int b, z; /* tase 2a */
for (int i=1, i<10, i++) /* tase 3 */
{...} /* tase 4 */
...
}
{
int a, x; /* tase 2b */
...
{ int c, x; /* tase 5 */
out = sqrt(a + b + c + x);
}
}
}
defineerib seitsmetasemelise skoobi, kus emamus tasemetest on hierahilises järjestuses, kuid kaks (2a, 2b) - paralleelsed:
Tase
Muutujad
0
out, x, test
1
a, b, c
2a
b, z
2b
a, x
3
i
4
...
5
c, x

Kõik kõrgema taseme muutujad on nähtavad/ kasutatavad ka madalamal (siin: suurema numbriga) tasemel, kuid kui nad seal uuesti deklareeritakse (s.t. seal esineb sama identifikaatoriga muutuja), on need sama nimega muutujad erinevad, näiteks tasemel 2a esinev muutuja b pole muutuja b, mis esineb tasemel 1 (funktsiooni test formaalne parameeter) - taseme 2a deklaratsioon int b "kirjutab üle" (muudab nähtamatuks) varemdeklareeritud sama nimega muutuja b; samuti pole taseme 2b muutuja a sama kui taseme 1 muutuja a ja muutuja x on erinev kõigil kolmel tasemel, kus ta esineb.

Skoobi arvestamiseks moodustatakse tavaliselt magasin, milles on iga skoobi taseme jaoks oma nimede tabel, kuid seda saab arvestada ka ühe üldise nimede tabeli abil, kui sellesse lisada vahendid (veerg) skoobi salvestamiseks.


Ülesandeid:
1. Ülesande tekst
Küsimused, probleemid: ©2004 Jaak Henno