Fundamentele programării (II) – JavaScript

În cadrul acestui episod vom introduce noțiunile de variabilă și vom lucra cu numere și texte. Vom presupune că deja știți să utilizați un mediu de programare (fie el și online); dacă nu, vă recomandăm să citiți din nou episodul anterior.

Variabile

Chiar și pentru cele mai simple programe, la un moment dat avem nevoie să păstrăm anumite informații. Nu am avut nevoie de acest lucru atunci când doar am afișat un mesaj, dar atunci când am avut nevoie de numele utilizatorului a trebuit să păstrăm informația respectivă. Să ne amintim ultimul program de data trecută:

În linia 1, avem o instrucțiune prin care preluăm informația introdusă de utilizator și o păstrăm în ceva de numit nume. Aceasta este o așa numită variabilă.

Variabilele pot fi văzute ca fiind niște recipiente care păstrează informații. Practic, cu ajutorul lor ajungem undeva în memoria calculatorului, luăm o mică parte din ea și îi dăm o denumire pentru a o putea folosi ulterior.

Avem nevoie de variabile pentru cele mai diverse scopuri. Dacă scriem un program care controlează un roboțel, vom avea nevoie de variabile care să conțină poziția acestuia, orientarea sa etc. În schimb, dacă programul nostru simulează un joc de fotbal, am avea nevoie de variabile pentru a păstra scorul.

În principiu, dacă trebuie să ținem minte ceva, cel mai simplu este să punem acel ceva într-o variabilă.

Majoritatea limbajelor moderne necesită declararea unei variabile înainte ca aceasta să poată fi utilizată. Javascript nu este un astfel de limbaj. Declarația este opțională. În alte limbaje variabilele au un așa numit tip; din nou, pentru JavaScript nu este cazul. O variabilă poate reprezenta la un moment dat un număr, apoi un text, apoi din nou un număr, un element complex etc.

Declarația este opțională, dar este permisă. În JavaScript, pentru a declara o variabilă, folosim cuvântul var, urmat de denumirea variabilei. Pentru un meci de fotbal, am putea avea o variabilă declarată astfel:

Avem cuvântul var, urmat de denumirea goluriGazde; declararea unei variabile este o instrucțiune.

Termenul variabilă implică faptul că ea se poate modifica. Prin diverse mecanisme, informația conținută de o variabilă se poate schimba în timpul execuției programului. De exemplu, într-un joc de fotbal, la începutul unui meci variabila care ar păstra numărul golurilor marcate de echipa gazdă ar conține informația 0. Dar, dacă echipa marchează un gol, informația respectivă trebuie să devină 1. Dacă se mai marchează unul, variabila va conține informația 2 și așa mai departe. Dar, dacă începe un joc nou, informația redevine 0. Această informație păstrată de către variabilă poartă denumirea de valoare a variabilei.

În JavaScript, este posibil ca în momentul declarării unei variabile să precizăm și ce valoare dorim să aibă la început. Pentru aceasta, după denumirea ei  adăugăm semnul =, urmat de valoarea dorită. O astfel de declarație ar putea fi:

Spunem că o astfel de variabilă este inițializată.

Dacă inițializăm variabila, putem să omitem cuvântul var. Instrucțiunea care declară variabila goluriGazde ar putea arăta astfel:

Numere

În majoritatea limbajelor există mai multe feluri de numere, chiar mai multe feluri de numere întregi. JavaScript face din nou notă discordantă; numerele sunt doar numere.

Am văzut cum declarăm o variabilă și cum o inițializăm. Dar, am spus că valorile variabilelor se pot modifica. Pentru aceasta avem nevoie de o instrucțiune. O astfel de instrucțiune arată așa:

Valoarea variabilei a va fi acum 2457 indiferent care a fost înainte. Informația înlocuită se pierde. Nu vom ști cât a fost acea valoare înainte, deci dacă avem nevoie de ea, ar fi fost bine să o punem altundeva (într-o altă variabilă de exemplu).

Instrucțiunea anterioară este validă numai dacă a este într-adevăr o variabilă de tip numeric. Ea trebuie să fi fost declarată anterior (nu neapărat și inițializată).

Să nu credeți că a = 2457 este o ecuație sau ceva asemănător; este o comandă. Calculatorului i se spune ca în zona de memorie corespunzătoare variabilei a să fie pusă valoarea 2457. O astfel de comandă se numește atribuire.

Seamănă cu declarația care specifică o valoare inițială și omite cuvântul var. Dacă este întâlnită o astfel de instrucțiune, în cazul în care variabila a apărut anterior, instrucțiunea este considerată a fi o atribuire. Dacă variabila nu a mai apărut, se consideră că instrucțiunea este o declarație cu inițializare.

Printr-o instrucțiune de atribuire, unei variabile i se dă o valoare.

Așadar, o instrucțiune de atribuire conține denumirea variabilei care va primi valoarea, urmată se semnul = și apoi de valoarea propriu zisă. În cazul nostru, valoarea a fost numărul 2457.

Există mai multe modalități de a reprezenta numerele; 2457 este varianta care ni se pare nouă naturală; nu e nicio șmecherie, e chiar numărul care urmează după 2456 și e înainte de 2458. Fără să explicăm de ce și doar pentru a arăta că se poate și altfel dacă chiar vrem, același număr poate fi reprezentat prin 0x999. Instrucțiunea următoare are exact același efect:

În JavaScript, numerele sunt numere simple dacă nu apare nimic altceva lipit de ele. Alte simboluri sau caractere le modifică semnificația. Partea 999 din 0x999 nu reprezintă deloc numărul 999.

Lucrurile pot deveni și mai ciudate: 2, '2' și "2" sunt complet diferite. Primul este numărul 2, iar celelalte sunt string-uri. Mai multe despre string-uri în secțiunea următoare.

Numerele cu zecimale pot și ele fi reprezentate așa cum ni se pare nouă natural; 2.5 este o valoare corectă; dar, putem avea și ciudățenii ca 1e-4 sau 5D.

Nu dorim să explicăm aceste lucruri care par bizare; dorim doar să atragem atenția că în multe cazuri lucrurile nu sunt ceea ce par.

String-uri

String-urile reprezintă, de obicei, texte; textul este cuprins între ghilimele sau apostroafe. Următoarele două string-uri au aceeași valoare:

În principiu, avem un apostrof, unul sau mai multe semne și apoi un alt apostrof sau ghilimele, unul sau mai multe semne și din nou ghilimele. De exemplu, string-ul + trebuie scris '+' sau "+".

Dar, ce ne facem dacă vrem să avem chiar valoarea apostrof într-un string delimitat prin apostroafe? Ați putea crede că ''' este soluția, dar nu e chiar așa. Al doilea apostrof este interpretat ca fiind sfârșitul elementelor care descriu stringul și al treilea nu mai este înțeles. Ca urmare, instrucțiunea s = ''' nu este corectă. O problemă similară apare în cazul string-urilor delimitate prin ghilimele care conțin ghilimele. Instrucțiunea s = """ nu este nici ea corectă,

Avem două variante; majoritatea limbajelor oferă una singură. Uneori, în JavaScript, scăpăm de această problemă, alegând delimitatorii. De exemplu, un string care conține doar ghilimele poate fi scris '"', iar unul care conține doar un apostrof poate fi scris "'".

Ați ghicit probabil, dacă string-ul conține atât apostroafe, cât și ghilimele, avem o problemă. Ni se oferă o soluție… Putem marca al apostroafele sau ghilimelele din interiorul string-urilor cu un simbol special care să indice faptul că acesta nu trebuie interpretat ca sfârșit al descrierii string-ului, ci ca semn propriu-zis. Elementul special este \(backslash). Următoarele instrucțiuni sunt corecte:

Marcajele din a doua și a treia linie sunt redundande, dar sunt permise.

Ar părea că ni s-au rezolvat toate problemele, dar… dacă avem nevoie fix de backslash? s = '\' sau s = "\" nu sunt corecte fiindcă backslash-ul indică faptul că următorul element trebuie interpretat ca fiind semnul apostrof, respectiv ghilimele. Soluția este să marcăm semnul backslash cu un alt backslash. Deci, pentru a atribui unei variabile valoarea \, va trebui să scriem una dintre următoarele instrucțiuni:

Dar… avem probleme suplimentare. Spuneam că string-urile sunt folosite în special pentru a păstra valori care reprezintă texte. Și textele pot avea mai multe linii. Cum facem?

Dacă scriem:

vom vedea că nu e corect.

Avem conceptul de caracter special de sfârșit de linie. Dacă dorim să avem textul Gazeta de Informatică scris pe trei rânduri (câte un cuvânt pe o linie), vom scrie:

Se spune că mai există o soluție, dar este o capcană. Dacă punem un \ la sfârșitul liniilor, atunci putem folosi mai multe linii. Iată un exemplu:

Dar, backslash-ul spune acum doar ca descrierea string-ului continuă pe linia următoare, nu include și caracterul special de sfârșit de linie. Instrucțiunea de mai sus este echivalentă cu:

Pentru a putea scrie textul pe mai multe linii și el să fie interpretat așa cum ne-am aștepta, ar trebui să scriem ceva de genul:

JavaScript este un limbaj care permite multe lucruri, unele mai bizare decât altele. Există numeroase alte soluții sau artificii care ne permit să lucrăm cu astfel de string-uri.

În curând va fi standardizată și utilizarea apostroafelor inverse pentru delimitarea string-urilor. Deja, majoritatea browser-elor permit acest lucru. De exemplu, se poate scrie:

Dar acest delimitator este mai special. String-urile dintre apostroafele inverse pot conține mai multe linii:

Din nou ar apărea probleme atunci când string-urile ar conține apostroafe inverse. Vom folosi backslash:

Va urma

În cadrul episodului următor vom prezenta detalii referitoare la modul în care sunt efectuate operațiile (nu neapărat matematice) și vom vedea ce sunt și la ce sunt folosite comentariile.