O variabilă în programarea imperativă este o zonă de memorie numită sau adresabilă în alt mod a cărei adresă poate fi utilizată pentru a accesa date . Datele conținute într-o variabilă (adică la o anumită adresă de memorie) se numesc valoarea acestei variabile (pe scurt: o variabilă este o bucată de memorie numită care are un anumit tip).
În alte paradigme de programare , de exemplu, în cele funcționale și logice , conceptul de variabilă se dovedește a fi oarecum diferit. În astfel de limbi, o variabilă este definită ca un nume cu care poate fi asociată o valoare sau chiar ca o locație pentru stocarea valorii.
Sfera și/sau durata de viață a unei variabile în unele limbi este dată de clasa de stocare .
Dacă tipul de date este determinat în timpul compilării , are loc tastarea statică , iar dacă în timpul executării, tastarea dinamică . În acest din urmă caz, se spune uneori că variabila nu are niciun tip, deși datele conținute în ea aparțin cu siguranță unui anumit tip de date , dar acest lucru este deja clarificat în timpul execuției programului.
În cele mai multe cazuri, tastarea statică reduce suprasarcina de execuție a programului, deoarece tastarea dinamică necesită suprasarcina de a descoperi tipurile de date și de a le turna în expresii de tip mixt. Tastarea statică vă permite să verificați tipurile în etapa de compilare a programului. De asemenea, facilitează identificarea erorilor în timpul fazei de dezvoltare, când remedierea lor este mai puțin costisitoare.
Cu toate acestea, în multe cazuri este necesar să se utilizeze tastarea dinamică. De exemplu, necesitatea de a menține compatibilitatea atunci când se trece la un nou format de reprezentare a datelor (de exemplu, partea veche a proiectului trimite data procedurii ca șir de caractere, iar obiectele noi folosesc un tip numeric mai modern).
Adresa unei locații de memorie numită poate fi, de asemenea, determinată atât în timpul compilării, cât și în timpul executării. Variabilele pot fi fie statice , fie dinamice în momentul în care sunt create . Primele sunt create în momentul pornirii programului sau subrutinei, iar cele din urmă sunt create în timpul execuției programului.
Adresarea dinamică este necesară doar atunci când cantitatea de date care trebuie stocată nu este cunoscută exact dinainte. Astfel de date sunt plasate în structuri dinamice speciale, al căror tip este ales în conformitate cu specificul sarcinii și cu capacitățile sistemului de programare selectat. Poate fi o stivă , un heap , o coadă etc. Chiar și un fișier, în sensul pe care N. Wirth l-a pus în Pascal , este o structură dinamică.
După sfera de aplicare , se disting variabilele locale și globale. Primele sunt disponibile doar pentru o anumită subrutină, cele din urmă pentru întregul program. Odată cu răspândirea programării modulare și de obiecte , au existat și variabile partajate (disponibile pentru anumite niveluri ale ierarhiei subrutinelor). Domeniul de aplicare este uneori dat de clasa de stocare . Vizibilitatea poate fi restricționată prin introducerea spațiilor de nume .
Restricția de vizibilitate a fost inventată atât pentru a putea folosi aceleași nume de variabile (ceea ce este rezonabil atunci când variabilele îndeplinesc o funcție similară în diferite subprograme), cât și pentru a proteja împotriva erorilor asociate cu utilizarea ilegală a variabilelor (totuși, pentru aceasta, programatorul trebuie deţine şi foloseşte logica adecvată la structurarea datelor).
În funcție de prezența unei structuri interne, variabilele pot fi simple sau complexe (compozite).
Cele mai tipice exemple de tipuri complexe sunt matrice (toate elementele sunt de același tip) și înregistrare (elementele pot avea tipuri diferite).
Trebuie subliniată relativitatea unei astfel de diviziuni: pentru programe diferite, aceeași variabilă poate avea o structură diferită.
De exemplu, compilatorul distinge 4 câmpuri într-o variabilă de tip real: semnele mantisei și exponentului, plus valorile acestora, dar pentru un programator care își compila programul, o variabilă reală este o singură celulă de memorie care stochează un număr real.