Se poate trece la capitolul următor cu tasta ► și se poate reveni la un capitol precedent cu tasta ◄

Variabile și constante


<

C
a
p
i
t
o
l
u
l

a
n
t
e
r
i
o
r

<

Variabilele reprezintă un element important în programare. Ele sunt categorizate de două coordonate: numele variabile și tipul ei.

Cea mai importantă proprietate a unei variabile constă în exact numele pe care îl poartă: „variabilă”. O variabilă reprezintă un mecanism de a avea valori diferite în puncte diferite ale programului accesibile printr-un singur identificator.

Dacă facem din nou referire la unul din exemplele anterioare: Se citesc n numere de la tastatură, cu n < 10, nu putem ști exact care va fi numărul ales. Trebuie să întrebăm utilizatorul și să avem un loc unde să memorăm răspunsul dat. Așadar, putem defini o variabilă și ca un loc unde putem reține valori pe care să le putem accesa ulterior.

Scop

Variabilele au o durată de viață diferită sau, altfel spus, au scopuri diferite. Există variabile globale, valoarea acestora putând fi accesată sau modificată oricând în program.

Opusul lor fiind variabilele locale, acestea au o durată de viață definită de structura din care fac parte. Unele variabile locale există doar în corpul funcțiilor și procedurilor. Alte variabile locale există doar într-un segment de cod, cum ar fi într-o buclă, ca, după terminarea sa, ele să nu mai existe. Altfel spus, o variabilă locală o definim în corpul unei funcții, îi putem da valori și putem să-i citim valorile, însă înafara funcției ea nu va exista. Chiar mediul de dezvoltare ne va da un mesaj de eroare când vom încerca să compilăm programul.

Variabilele definite în funcții proceduri vor fi întotdeauna locale. Nu există și niciodată să nu ne bazăm că o variabilă dintr-un subprogram va fi accesibilă în altă funcție/procedură sau în programul principal.

Dacă o variabilă globală are același nume cu o variabilă locală, în funcția sau procedura aferentă, va fi folosită variabila locală. Multe limbaje oferă mecanisme pentru a diferenția una de cealaltă. Însă cel mai bine este să le alegem nume diferite.

Variante de formare a numelui unei variabile

Variabilele poartă denumiri uzuale, precum numele de persoane așa că pot fi compuse din orice șir de caractere, însă câteva reguli sunt bine de urmat:

- numele de variabile trebuie să înceapă cu o litera [De la a la z sau de la A la Z] sau cu caracterul „_”; niciodată cu o cifră sau un caracter special

- numele trebuie să fie reprezentativ pentru valorile ce le cuprinde, de exemplu: _numeAganjat, pret_unitar sau TOTAL. Însă există un standard interesant pentru a găsi nume pentru variabile: Notația maghiară.

Această gen de definire a numelui variabilelor ajută la înțelegerea rolului lor mult mai rapid.

Notația maghiară urmează logica:

- primele caractere din denumirea variabilei reprezintă tipul ei:

  • n - integer, de exemplu: nContor, nNumarFisier, nNumarPrim. În mod automat știm că variabila aceasta este de tip întreg.
  • fp - număr real, de exemplu: fpCostTotal, fpArie.
  • sz - șir de caractere terminat în „0” - o caracteristică a limbajelor C/C++. De exemplu: szNume, szCerere, szDenumireMarca

De asemenea pot fi definite șiruri: arrayfpNoteMatematica. În cazul acesta avem un șir de numere reale cu semnificația de note școlare.

Scopul unei variabile poate fi codificat sub această notație: vom putea avea două variabile ca: globalfpTotal și localnTotal. Așadar chiar dacă știm că, având două variabile Total și știm că programul o va folosi pe cea locală, folosind genul acesta de notație obținem variabile diferite în orice situație.

Semnificația numelui unei variabile

Numele dat unei variabile trebuie să descrie rolul pe care aceasta îl servește. Notația de mai sus are scopul de a pune în evidență cele două fețe ale unei variabile: tipul și scopul ei, însă nu este altceva decât un ghid. O variabilă arrayTipuriServicii poate fi notată și TipuriServicii_array sau sir_de_Tipuri_Servicii. Ceea ce contează în primul rând este ca cel care vine și citește codul să înțeleagă imediat rolul fiecărei variabile.

De aici rezultă și opusul. Cum facem dacă vrem să avem un cod greu înspre imposibil de urmărit? Atunci trebuie doar să folosim denumiri cât mai criptice pentru variabile. Dacă notăm variabilele folosite în ordine alfabetică de la a la z continuând cu aa, ab, ac, ... atunci va fi foarte dificil pentru altcineva să urmărească logica codului pe care-l scriem.

Tipul variabilei

În unele limbaje, precum Pascal, C, Java, fiecărei variabile i se atașează un tip. Fie număr întreg, real, fie un șir de caractere ori doar un caracter, fie chiar și o funcție. Acest lucru se face în mod explicit de către programator și are rolul de a defini limitele domeniului pe care variabila poate lua valori. Cât și a operațiilor care pot să fie făcute cu ea.

De ce nu e doar un singur tip de variabilă pentru număr care să aibă un domeniu cât mai mare? Explicația ține de eficiență. Programarea are ca scop pe lângă rezolvarea problemei în cauză și rezolvarea ei în mod eficient. Dacă toate variabilele ar fi pe 64 de biți, astfel cuprinzând un domeniu larg, atunci un șir de 1 000 de astfel de numere ar ocupa 8 kilobytes de memorie. Desigur, asta nu ar fi o problemă la nivelul în care memoria RAM a unui calculator actual pornește de la un Gigabyte. Însă dacă avem de prelucrat câteva milioane de numere?

Al doilea considerent ține de performanță. Numerele sunt procesate în mod diferit. Procesorul nu știe realiza decât operații logice: AND, OR, NOT între valori binare. De asemenea până acuma câțiva ani, regiștrii procesorului erau pe 32 de biți [printre primele procesoare pe 32 de biți a fost și 386-ele, lansat în 1985 - însă software-ul încă lucra pe 16 biți], ceea ce e în regulă dacă ai de-a face cu numere întregi până la 4 294 967 296. Iar dacă avem de-a face cu numere cu semn atunci valorile vin de la -2 147 483 648 la 2 147 483 647. Dacă avem numere mai mari, atunci orice operație, ca cea de adunare, se face prin mult mai mulți pași decât a pune două numere față în față și a le însuma.

Când intră în discuție numerele reale, cu virgulă, atunci lucruri se complică și mai mult.

Desigur, programele mici și medii, rulate pe sisteme actuale cu procesoare rulând la peste 1 Gigahertz, cu memorie RAM mai mare de 1 Gigabyte, de un singur utilizator, nu sunt urmărite după eficiență. Însă când o aplicație trebuie să adune și prelucreze informații dintr-o companie întreagă, dintr-o țară întreagă sau să lucreze la nivel mondial, atunci și diferența de o milisecundă între un cod funcțional și unul eficient are un rol crucial.

Și fiindcă vorbim de valori, este imperativ să inițializăm variabilele. De ce? Să zicem că declarăm variabila temperatura ca număr întreg. În momentul acesta programul va căuta o locație din memorie care e liberă și va asocia numele cu o adresă. Să zicem că aplicația controlează un aparat de aer condiționat. Dacă temperatura este peste 25 de grade, îl pornește. Dacă uităm să inițializăm variabila, valoarea pe care o va avea inițial depinde de ce este la adresa liberă găsită. Partea memoriei RAM care nu este folosită nu este curățată, deci nu are valoarea 0 de la început. Partea memoriei care nu este folosită este marcată doar ca nefolosită însă orice valoare a fost ultima dată acolo, rămâne.

Așadar, dacă următoarea instrucțiune după declarare este: DACĂ temperatura > 25 AND aer_condiționat_este_oprit ATUNCI porneste_aer_conditionat, afară e iarnă și temperatura va avea valoarea 1 000 (asta a găsit la adresa de memorie liberă, scrisă de alt program și eliberată) atunci se va face foarte frig, foarte repede.

Desigur, în acest caz, după declarare va trebui să aflăm care este temperatura (să inițializăm variabila cu o valoare relevantă programului și locației din program în care ne aflăm) și abia pe urmă să vedem ce și cum avem de făcut.

Structuri

Variabilele pot să fie aranjate în structuri. Cel mai la îndemână exemplu este o structură de date numită persoană. Ea poate cuprinde numele, adresa, ambele șiruri de caractere, cât și vârsta, ce poate fi un număr întreg mai mare ca 0. Din acest motiv structurile sunt extrem de folositoare fiindcă grupează informația în elemente pe care să le înțelegem mai ușor.

Constante

Constantele se diferențiază de variabile prin faptul că nu își schimbă valoarea pe durata execuției programului. La o adică, așa ceva poate să fie realizat și cu o variabilă căreia doar îi citim valoarea. Însă a declara o constantă ne oferă liniștea că nici dacă am vrea să-i dăm altă valoare, nu vom putea.

Constantă poate fi valoarea aproximativă a lui PI sau numele și locația unui fișier de jurnalizare (logging - da, dar îmi place și limba română).


>

C
a
p
i
t
o
l
u
l

u
r
m
ă
t
o
r

>

Ți-a fost de ajutor ce am scris aici?
Hei, mersi de răspuns.