En variabel i imperativ programmering er et navngivet eller på anden måde adresserbart hukommelsesområde , hvis adresse kan bruges til at få adgang til data . Dataene indeholdt i en variabel (det vil sige på en given hukommelsesadresse) kaldes værdien af denne variabel (kort sagt: en variabel er et navngivet stykke hukommelse, der har en bestemt type).
I andre programmeringsparadigmer , for eksempel i funktionel og logisk , viser begrebet en variabel sig at være noget anderledes. På sådanne sprog er en variabel defineret som et navn , som en værdi kan associeres med, eller endda som en placering til at gemme værdien.
Omfanget og/eller levetiden for en variabel på nogle sprog er givet af lagerklassen .
Hvis datatypen bestemmes på kompileringstidspunktet , finder statisk indtastning sted , og hvis datatypen køres, dynamisk indtastning . I sidstnævnte tilfælde siges det nogle gange, at variablen ikke har nogen type, selvom de data , der er indeholdt i den, bestemt tilhører en bestemt datatype , men dette er allerede afklaret under udførelsen af programmet.
I de fleste tilfælde reducerer statisk indtastning omkostningerne ved programafvikling, fordi dynamisk indtastning kræver overhead med at finde ud af datatyper og caste dem i udtryk med blandede typer. Statisk indtastning giver dig mulighed for at kontrollere typer på stadiet af programkompileringen. Det gør det også nemmere at opdage fejl i udviklingsfasen, hvor det er billigere at rette dem.
Men i mange tilfælde er det nødvendigt at bruge dynamisk skrivning. For eksempel behovet for at opretholde kompatibilitet, når du flytter til et nyt datarepræsentationsformat (for eksempel sender den gamle del af projektet datoen til proceduren som en tegnstreng, og nye objekter bruger en mere moderne numerisk type).
Adressen på en navngivet hukommelsesplacering kan også bestemmes både på kompileringstidspunktet og ved runtime. Variabler kan enten være statiske eller dynamiske på det tidspunkt, de oprettes . Førstnævnte oprettes på det tidspunkt, hvor programmet eller subrutinen startes, og sidstnævnte oprettes under afviklingen af programmet.
Dynamisk adressering er kun nødvendig, når mængden af data, der skal lagres, ikke er nøjagtigt kendt på forhånd. Sådanne data placeres i specielle dynamiske strukturer, hvis type er valgt i overensstemmelse med opgavens specifikationer og med mulighederne i det valgte programmeringssystem. Det kan være en stack , en heap , en kø osv. Selv en fil, i den forstand som N. Wirth satte ind i Pascal , er en dynamisk struktur.
Efter omfang skelnes lokale og globale variabler. Førstnævnte er kun tilgængelige for en specifik subrutine, sidstnævnte for hele programmet. Med udbredelsen af modul- og objektprogrammering var der også delte variabler (tilgængelige på visse niveauer af subrutinehierarkiet). Omfanget er nogle gange givet af lagerklassen . Synlighed kan begrænses ved at indføre navnerum .
Synlighedsbegrænsning blev opfundet både for at kunne bruge de samme variabelnavne (hvilket er rimeligt, når variabler udfører en lignende funktion i forskellige underprogrammer), og for at beskytte mod fejl i forbindelse med ulovlig brug af variabler (men til dette skal programmøren eje og bruge den passende logik ved datastrukturering).
Ifølge tilstedeværelsen af en intern struktur kan variabler være enkle eller komplekse (sammensatte).
De mest typiske eksempler på komplekse typer er array (alle elementer er af samme type) og record (elementer kan have forskellige typer).
Relativiteten af en sådan opdeling bør understreges: For forskellige programmer kan den samme variabel have en anden struktur.
For eksempel skelner compileren 4 felter i en variabel af en reel type: tegn på mantissen og eksponenten plus deres værdier, men for en programmør, der kompilerer sit program, er en reel variabel en enkelt hukommelsescelle, der gemmer et reelt tal.