Se även:

En variabels räckvidd beskriver var i ett programs text variabeln kan användas, medan räckvidden (eller livslängden) beskriver när i ett programs utförande variabeln har ett (meningsfullt) värde. En variabels räckvidd är egentligen en egenskap hos variabelns namn, medan räckvidden är en egenskap hos själva variabeln. Dessa ska inte förväxlas med kontext (även kallad miljö), som är en egenskap hos programmet och varierar beroende på punkt i källkoden eller utförandet – se räckvidd: en översikt. Vidare kan objektens livslängd sammanfalla med variabelns livslängd, men är i många fall inte knuten till variabelns livslängd.

Ett variabelnamns omfattning påverkar dess utbredning.

Utbredning är en viktig del av namnupplösningen av en variabel. De flesta språk definierar en specifik räckvidd för varje variabel (liksom för alla andra namngivna enheter), som kan skilja sig åt inom ett visst program. En variabels omfattning är den del av programkoden för vilken variabelns namn har betydelse och för vilken variabeln sägs vara ”synlig”. När en variabel kommer in i detta tillämpningsområde börjar normalt sett dess livslängd (när den kommer in i sammanhanget) och när den lämnar detta tillämpningsområde slutar normalt sett dess livslängd (när den går ut ur sammanhanget). En variabel med ”lexikal räckvidd” har t.ex. endast betydelse inom en viss funktion/underrutin, eller närmare bestämt inom ett block av uttryck/påståenden (i enlighet med funktionens räckvidd eller blockets räckvidd); detta är en statisk upplösning som kan utföras vid parse- eller kompileringstid. Alternativt löses en variabel med dynamisk räckvidd upp vid körtid, baserat på en global bindningsstapel som beror på det specifika kontrollflödet. Variabler som endast är tillgängliga inom vissa funktioner kallas ”lokala variabler”. En ”global variabel”, eller en variabel med obestämd räckvidd, kan refereras till var som helst i programmet.

Extension, å andra sidan, är en körtidsrelaterad (dynamisk) aspekt av en variabel. Varje bindning av en variabel till ett värde kan ha sin egen omfattning vid körtiden. Bindningens omfattning är den del av programmets exekveringstid under vilken variabeln fortsätter att hänvisa till samma värde eller minnesplats. Ett körande program kan gå in i och lämna en viss omfattning många gånger, som i fallet med en stängning.

Om inte programmeringsspråket har skräpinsamling kan en variabel vars omfattning permanent överskrider dess räckvidd resultera i ett minnesläckage, varvid det minne som allokerats för variabeln aldrig kan frigöras eftersom den variabel som skulle användas för att referera till variabeln i syfte att ta bort allokeringen inte längre är åtkomlig. Det kan dock vara tillåtet för en variabelbindning att sträcka sig utanför sin räckvidd, vilket förekommer i Lisp closures och statiska lokala variabler i C. När exekveringen går tillbaka till variabelns räckvidd kan variabeln återigen användas. En variabel vars räckvidd börjar innan dess omfattning gör det sägs vara oinitialiserad och har ofta ett odefinierat, godtyckligt värde om den nås (se wild pointer), eftersom den ännu inte uttryckligen har fått ett visst värde. En variabel vars omfattning slutar före dess räckvidd kan bli en ”dangling pointer” och anses vara oinitialiserad igen eftersom dess värde har förstörts. Variabler som beskrivs i de två föregående fallen kan sägas vara out of extent eller unbound. I många språk är det ett fel att försöka använda värdet av en variabel när den är utanför räckvidden. I andra språk kan detta ge oförutsägbara resultat. En sådan variabel kan dock tilldelas ett nytt värde, vilket ger den en ny utsträckning.

För att effektivisera utrymmet kan ett minnesutrymme som behövs för en variabel allokeras endast när variabeln används för första gången och frigöras när den inte längre behövs. En variabel behövs bara när den är inom räckvidden, så att påbörja varje variabels livstid när den kommer in i räckvidden kan ge utrymme till oanvända variabler. För att undvika att slösa bort sådant utrymme varnar kompilatorer ofta programmerare om en variabel deklareras men inte används.

Det anses vara god programmeringspraxis att göra räckvidden för variabler så smal som möjligt så att olika delar av ett program inte oavsiktligt interagerar med varandra genom att modifiera varandras variabler. Genom att göra så förhindrar man också åtgärder på distans. Vanliga tekniker för att göra detta är att låta olika delar av ett program använda olika namnrymder, eller att göra enskilda variabler ”privata” genom antingen dynamisk variabelscoping eller lexikal variabelscoping.

Många programmeringsspråk använder sig av ett reserverat värde (ofta benämnt null eller nil) för att indikera en ogiltig eller oinitialiserad variabel.

Lämna ett svar

Din e-postadress kommer inte publiceras.