En variabel i imperativ programmering är ett namngivet eller på annat sätt adresserbart minnesområde vars adress kan användas för att komma åt data . Data som finns i en variabel (det vill säga vid en given minnesadress) kallas för värdet av denna variabel (kort sagt: en variabel är ett namngivet minne som har en viss typ).
I andra programmeringsparadigm , till exempel i funktionell och logisk , visar sig konceptet för en variabel vara något annorlunda. På sådana språk definieras en variabel som ett namn som ett värde kan associeras med , eller till och med som en plats för att lagra värdet.
Omfattningen och/eller livslängden för en variabel på vissa språk ges av lagringsklassen .
Om datatypen bestäms vid kompilering sker statisk typning , och om vid körning, dynamisk typning . I det senare fallet sägs det ibland att variabeln inte har någon typ, även om data som finns i den förvisso tillhör en viss datatyp , men detta är redan klarlagt under körningen av programmet.
I de flesta fall minskar statisk typning kostnaden för programexekveringen eftersom dynamisk typning kräver omkostnader för att ta reda på datatyper och casta dem i uttryck av blandad typ. Statisk typning låter dig kontrollera typer vid programkompileringsstadiet. Det gör det också lättare att upptäcka buggar under utvecklingsfasen, när det är billigare att fixa dem.
Men i många fall är det nödvändigt att använda dynamisk typning. Till exempel behovet av att upprätthålla kompatibilitet när man flyttar till ett nytt datarepresentationsformat (till exempel skickar den gamla delen av projektet datumet till proceduren som en teckensträng, och nya objekt använder en modernare numerisk typ).
Adressen till en namngiven minnesplats kan också bestämmas både vid kompilering och vid körning. Variabler kan vara antingen statiska eller dynamiska när de skapas . De förra skapas vid den tidpunkt då programmet eller subrutinen startas, och de senare skapas under körningen av programmet.
Dynamisk adressering behövs endast när mängden data som ska lagras inte är exakt känd i förväg. Sådan data placeras i speciella dynamiska strukturer, vars typ väljs i enlighet med uppgiftens särdrag och med funktionerna hos det valda programmeringssystemet. Det kan vara en stack , en heap , en kö , etc. Till och med en fil, i den meningen som N. Wirth lagt in i Pascal , är en dynamisk struktur.
Genom omfattning särskiljs lokala och globala variabler. De förra är endast tillgängliga för en specifik subrutin, de senare för hela programmet. Med spridningen av modul- och objektprogrammering fanns det också delade variabler (tillgängliga för vissa nivåer av subrutinhierarkin). Omfattningen ges ibland av lagringsklassen . Synligheten kan begränsas genom att införa namnutrymmen .
Synlighetsbegränsning uppfanns både för att kunna använda samma variabelnamn (vilket är rimligt när variabler utför en liknande funktion i olika underprogram), och för att skydda mot fel associerade med olaglig användning av variabler (för detta måste dock programmeraren egen och använd lämplig logik vid datastrukturering).
Beroende på närvaron av en intern struktur kan variabler vara enkla eller komplexa (sammansatta).
De mest typiska exemplen på komplexa typer är array (alla element är av samma typ) och record (element kan ha olika typer).
Relativiteten för en sådan uppdelning bör betonas: för olika program kan samma variabel ha en annan struktur.
Till exempel skiljer kompilatorn 4 fält i en variabel av reell typ: tecken på mantissan och exponenten, plus deras värden, men för en programmerare som kompilerar sitt program är en reell variabel en enda minnescell som lagrar ett reellt tal.