Vezi și:

: Variabile libere și variabile legate

Încadrarea unei variabile descrie în ce parte a textului unui program poate fi utilizată variabila, în timp ce întinderea (sau durata de viață) descrie momentul în care în execuția unui program o variabilă are o valoare (semnificativă). Domeniul de aplicare al unei variabile este, de fapt, o proprietate a numelui variabilei, iar domeniul de aplicare este o proprietate a variabilei însăși. Acestea nu trebuie confundate cu contextul (numit și mediu), care este o proprietate a programului și variază în funcție de punctul din codul sursă sau din execuție – a se vedea domeniul de aplicare: prezentare generală. Mai mult, durata de viață a obiectului poate coincide cu durata de viață a variabilei, dar, în multe cazuri, nu este legată de durata de viață a variabilei.

Scopul unui nume de variabilă îi afectează întinderea.

Scopul este o parte importantă a rezoluției numelui unei variabile. Majoritatea limbajelor definesc o arie de cuprindere specifică pentru fiecare variabilă (precum și pentru orice altă entitate numită), care poate diferi în cadrul unui anumit program. Domeniul de aplicare al unei variabile este porțiunea din codul programului pentru care numele variabilei are semnificație și pentru care se spune că variabila este „vizibilă”. Intrarea în acest domeniu de aplicare începe, de obicei, durata de viață a unei variabile (atunci când intră în context), iar ieșirea din acest domeniu de aplicare încheie, de obicei, durata de viață a acesteia (atunci când iese din context). De exemplu, o variabilă cu „domeniu de aplicare lexicală” are sens numai în cadrul unei anumite funcții/subprograme sau, mai precis, în cadrul unui bloc de expresii/declarații (în consecință, cu domeniu de aplicare al funcției sau domeniu de aplicare al blocului); aceasta este o rezolvare statică, care poate fi efectuată în momentul analizei sau al compilării. Alternativ, o variabilă cu domeniu de aplicare dinamic este rezolvată în timpul execuției, pe baza unei stive de legături globale care depinde de fluxul de control specific. Variabilele accesibile numai în cadrul unor anumite funcții sunt denumite „variabile locale”. O „variabilă globală”, sau una cu domeniu de aplicare nedefinit, poate fi menționată oriunde în program.

Extensiunea, pe de altă parte, este un aspect al unei variabile în timp de execuție (dinamic). Fiecare legare a unei variabile la o valoare poate avea propria sa extensie la momentul execuției. Extensia legăturii este porțiunea din timpul de execuție a programului în care variabila continuă să se refere la aceeași valoare sau locație de memorie. Un program în curs de execuție poate intra și ieși dintr-o anumită extensie de mai multe ori, ca în cazul unei închideri.

Dacă limbajul de programare nu dispune de funcția de colectare a gunoiului, o variabilă a cărei extensie depășește permanent domeniul său de aplicare poate duce la o scurgere de memorie, prin care memoria alocată pentru variabilă nu poate fi eliberată niciodată, deoarece variabila care ar fi folosită pentru a o referi în scopul dezalocării nu mai este accesibilă. Cu toate acestea, poate fi permis ca o legătură de variabilă să se extindă dincolo de domeniul său de aplicare, așa cum se întâmplă în cazul închiderilor Lisp și al variabilelor locale statice C; atunci când execuția revine în domeniul de aplicare al variabilei, variabila poate fi utilizată din nou. O variabilă a cărei sferă de cuprindere începe înainte de extinderea sa se numește neinițializată și are adesea o valoare nedefinită, arbitrară, în cazul în care este accesată (a se vedea pointer sălbatic), deoarece nu a primit încă în mod explicit o anumită valoare. O variabilă a cărei extensie se termină înainte de domeniul său de aplicare poate deveni un pointer suspendat (dangling pointer) și este considerată din nou neinițializată, deoarece valoarea sa a fost distrusă. Se poate spune că variabilele descrise în cele două cazuri anterioare sunt „out of extent” sau „unbound”. În multe limbaje, este o eroare să încerci să folosești valoarea unei variabile atunci când aceasta este în afara limitei. În alte limbaje, acest lucru poate produce rezultate imprevizibile. Cu toate acestea, unei astfel de variabile i se poate atribui o nouă valoare, ceea ce îi conferă o nouă extensie.

Pentru eficiență spațială, un spațiu de memorie necesar pentru o variabilă poate fi alocat numai atunci când variabila este utilizată pentru prima dată și eliberat atunci când nu mai este necesar. O variabilă este necesară numai atunci când se află în domeniul de aplicare, astfel încât începerea duratei de viață a fiecărei variabile atunci când intră în domeniul de aplicare poate oferi spațiu pentru variabilele neutilizate. Pentru a evita irosirea unui astfel de spațiu, compilatorii avertizează adesea programatorii dacă o variabilă este declarată, dar nu este utilizată.

Se consideră că este o bună practică de programare ca domeniul de aplicare al variabilelor să fie cât mai restrâns posibil, astfel încât diferite părți ale unui program să nu interacționeze accidental între ele prin modificarea variabilelor celorlalți. Procedând astfel se previne, de asemenea, acțiunea la distanță. Tehnicile obișnuite pentru a face acest lucru constau în utilizarea de către diferite secțiuni ale unui program a unor spații de nume diferite sau în a face variabilele individuale „private”, fie prin intermediul unei variabile dinamice, fie prin intermediul unei variabile lexicale.

Multe limbaje de programare folosesc o valoare rezervată (adesea numită null sau nil) pentru a indica o variabilă invalidă sau neinițializată.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.