Se også:

En variabels omfang beskriver, hvor i et programs tekst variablen kan bruges, mens omfanget (eller levetiden) beskriver, hvornår i et programs udførelse en variabel har en (meningsfuld) værdi. Omfanget af en variabel er faktisk en egenskab ved variablens navn, og omfanget er en egenskab ved selve variablen. Disse skal ikke forveksles med kontekst (også kaldet miljø), som er en egenskab ved programmet, og som varierer alt efter punkt i kildekoden eller udførelsen – se omfang: en oversigt. Endvidere kan objektets levetid falde sammen med variablens levetid, men er i mange tilfælde ikke bundet til variablens levetid.

Et variabelnavnes omfang påvirker dets omfang.

Omfanget er en vigtig del af navneopløsningen af en variabel. De fleste sprog definerer et specifikt omfang for hver variabel (samt enhver anden navngiven enhed), som kan være forskellig inden for et givet program. Omfanget af en variabel er den del af programkoden, for hvilken variablens navn har betydning, og for hvilken variablen siges at være “synlig”. Når en variabel kommer ind i dette anvendelsesområde, begynder dens levetid typisk (når den kommer ind i kontekst), og når den forlader dette anvendelsesområde, slutter dens levetid typisk (når den går ud af kontekst). F.eks. er en variabel med “leksikalsk rækkevidde” kun betydningsfuld inden for en bestemt funktion/underprogram eller mere præcist inden for en blok af udtryk/angivelser (i overensstemmelse hermed med funktions- eller blokområde); dette er en statisk opløsning, der kan udføres på parse- eller kompileringstidspunktet. Alternativt opløses en variabel med dynamisk rækkevidde på køretid, baseret på en global bindingstack, der afhænger af det specifikke kontrolflow. Variabler, der kun er tilgængelige inden for en bestemt funktion, kaldes “lokale variabler”. En “global variabel”, eller en variabel med ubestemt rækkevidde, kan der henvises til overalt i programmet.

Extent er på den anden side et kørselstidsaspekt (dynamisk) af en variabel. Hver binding af en variabel til en værdi kan have sit eget omfang på køretid. Bindingens omfang er den del af programmets udførelsestid, hvor variablen fortsat henviser til den samme værdi eller hukommelsesplacering. Et kørende program kan gå ind og ud af et givet omfang mange gange, som i tilfælde af en lukning.

Medmindre programmeringssproget indeholder garbage collection, kan en variabel, hvis omfang permanent overstiger dens omfang, resultere i en hukommelseslækage, hvorved den hukommelse, der er allokeret til variablen, aldrig kan frigives, da den variabel, der ville blive brugt til at referere til den med henblik på deallokering, ikke længere er tilgængelig. Det kan dog være tilladt for en variabelbinding at strække sig ud over sit anvendelsesområde, som det er tilfældet i Lisp closures og statiske lokale variabler i C. Når udførelsen går tilbage til variablens anvendelsesområde, kan variablen igen anvendes. En variabel, hvis scope begynder før dens omfang, siges at være uinitialiseret og har ofte en udefineret, vilkårlig værdi, hvis den tilgås (se wild pointer), da den endnu ikke udtrykkeligt har fået en bestemt værdi. En variabel, hvis omfang slutter før dens scope, kan blive en dangling pointer og anses for at være uinitialiseret endnu en gang, da dens værdi er blevet ødelagt. Variabler, der er beskrevet i de to foregående tilfælde, kan siges at være uden for rækkevidde eller ubundne. I mange sprog er det en fejl at forsøge at bruge værdien af en variabel, når den er uden for rækkevidde. I andre sprog kan det give uforudsigelige resultater. En sådan variabel kan imidlertid tildeles en ny værdi, hvilket giver den en ny extent.

For at opnå pladsbesparelse kan en hukommelsesplads, der er nødvendig for en variabel, kun allokeres, når variablen bruges første gang, og frigives, når den ikke længere er nødvendig. Der er kun brug for en variabel, når den er i scope, og derfor kan det give plads til ubrugte variabler at begynde hver variabels levetid, når den kommer ind i scope. For at undgå at spilde en sådan plads advarer compilere ofte programmører, hvis en variabel er deklareret, men ikke bruges.

Det anses for god programmeringspraksis at gøre variablers anvendelsesområde så snævert som muligt, så forskellige dele af et program ikke ved et uheld interagerer med hinanden ved at ændre hinandens variabler. Ved at gøre dette forhindrer man også handling på afstand. Almindelige teknikker til at gøre dette er at lade forskellige dele af et program bruge forskellige navnerum, eller at gøre individuelle variabler “private” gennem enten dynamisk variabel scoping eller leksikalsk variabel scoping.

Mange programmeringssprog anvender en reserveret værdi (ofte kaldet null eller nil) for at angive en ugyldig eller uinitialiseret variabel.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.