marți, 4 noiembrie 2008

Sintaxa JavaScript partea 1/2

Interfete Web

Partea a 2-a tutorialului o puteti gasi la adresa: http://interfetze.blogspot.com/2008/11/sintaxa-javascript-partea-22.html

Nivel de dificultate: mediu

In continuare avem un tutorial format din doua parti care are ca scop prezentarea elementelor de sintaxa din JavaScript.

Având în vedere că JavaScript este inspirat din Java, care la rândul său e inspirat din limbajul C, cele trei au o sintaxă foarte similară în ceea ce priveşte operatorii, structurile de control şi accesarea obiectelor, chiar identică în unele cazuri. Voi recapitula totuşi structurile de control, pentru cei care nu le cunosc sau au lucrat în alte limbaje de programare, 'non-C-like':

1. instrucţiunea multiplă
La fel ca în C sau Java, fiecare linie individuală din cod este considerată ca o instrucţiune. De asemenea, structurile condiţionale sau repetitive primesc ca şi obiect de executat o singură instrucţiune. Putem însă grupa execuţia mai multor instrucţiuni ca să fie văzute ca o succesiune unitară de execuţie (practic 'păcălim' compilatorul să le interpreteze ca pe o singură instrucţiune) încadrându-le cu o pereche de acolade { }.
Acoladele sunt folosite de asemenea pentru a delimita instrucţiunile care constituie corpul unei funcţii-utilizator. Nu voi elabora pe această temă, întrucât voi discuta mai pe larg într-unul din tutorialele următoare.

2. comentariile
La fel ca în C şi Java, JavaScript suportă două tipuri de comentarii: comentarii-bloc şi comentarii-linie. Acestea nu au nici o valoare reală pentru program (conţinutul lor nu afecteaza în nici un mod execuţia scriptului), fiind folosite mai mult pentru a realiza o documentare sumară a scriptului, în ideea de a găsi mai uşor o anumită secţiune de cod sau în ideea că scriptul scris de un programator va fi mai târziu modificat sau extins de un altul, înlesnindu-i acestuia lucrul şi înţelegerea algoritmului şi a variabilelor folosite.
De asemenea, comentariile sunt utile la depanarea programului, atunci când suspectăm o instrucţiune sau un bloc de cod că ar genera o anumită eroare: cea mai buna metodă de a confirma acest lucru este să eliminăm codul respectiv din program şi să vedem dacă eroarea mai apare. Ei bine, gândiţi-vă dacă e vorba de 20 sau chiar 50 de linii de cod, câtă muncă ar presupune dacă le-am şterge din program, constatând apoi că sursa erorii e alta, şi să fim nevoiţi să le scriem din nou... (da, ştiu şi eu de comanda 'Undo', însă ea nu este una pe care trebuie să ne bazăm 100% ). Drept urmare, cea mai simplă şi mai sigură metodă de a elimina temporar codul respectiv e să il 'comentăm'.

Revenind la subiect, cele două tipuri de comentarii din JavaScript sunt:
- comentarii-bloc: orice text cuprins între perechea de simboluri /* şi */ consecutivă
- comentarii-linie: textul aflat după simbolul // şi până la sfârşitul linei respective

3. structuri conditionale (branch-uri)
Blocurile condiţionale se folosesc pentru a determina devierea execuţiei programului în direcţii diferite, sau ne-executarea unei anumite secţiuni de cod, în funcţie de valoarea uneia sau mai multor variabile verificate ca şi condiţie.

a) blocul if - else
Blocul condiţional if - else se foloseşte în cazul în care dorim execuţia uneia din două variante, sau dorim ca o secţiune de cod să se execute doar în anumite condiţii. Sintaxa instrucţiunii este următoarea:

if (condiţie)
instrucţiune

//sau

if (condiţie)
instrucţiune1;
else
instrucţiune2; 

Condiţia poate fi orice expresie care poate fi evaluată logic (sub formă de 'adevărat' sau 'fals') - comparare, egalitate, inegalitate, combinaţie de operaţii logice etc. Reţineţi de asemenea că JavaScript realizează conversia între tipurile de variabile automat (automatic typecasting), drept urmare, chiar dacă expresia condiţiei nu e strict logicăa, se încearcă conversia ei la o valoare true sau false. Valorile null, 0 numeric, sau string-ul gol sunt evaluate la valoarea false, în timp ce orice altă valoare este evaluată la true.
Ramura else e opţională, ea putând lipsi, caz în care dacă nu se îndeplineşte condiţia, compilatorul continuă execuţia codului de la linia următoare blocului, practic 'sărind' peste instrucţiune. Instrucţiunea poate fi reprezentată de o singură instrucţiune efectivă sau de o instrucţiune multiplă.

var a = 3;
var b = 6;

if (a == b)
c = true;
else
c = false;

// in conditiile acestea, c va avea valoarea false


b) blocul switch
Switch se foloseşte atunci când expresia evaluată poate avea mai multe posibile valori. Practic un bloc switch e similar cu o succesiune de blocuri if - else.

switch (expresie) {
case valoare1 :
operatie1;
case valoare2 :
operatie2;
...
default :
operatie_implicita;


În momentul în care compilatorul constată că expresia are una din valorile enumerate, va executa codul din bloc, începând de la eticheta corespunzătoare valorii (eticheta = o declaraţie "case valoare :" ). 
Atenţie, execuţia nu va ieşi din bloc la întâlnirea următoarei valori, ci va continua execuţia până la finalul buclei sau întâlnirea unei instrucţiuni break (aşa-numitul comportament 'fall-through' al instrucţiunii switch). Pentru a evita asta, fiecare cod aferent unei etichete trebuie finalizată cu o instrucţiune break.
Secţiunea default e opţională, iar când există, trebuie să fie ultima secţiune. Codul din această secţiune se execută atunci când expresia nu are nici una din valorile etichetelor din bloc, caz în care, dacă default lipseste, nu se va executa nimic.

4. structuri repetitive (bucle)
Structurile repetitive reprezintă instrucţiuni sau blocuri de instrucţiuni care sunt executate în mod repetat, atâta timp cât una sau mai multe condiţii sunt îndeplinite.

a) bucla for - repetiţie pe un număr stabilit de iteraţii
Atunci când o secţiune de cod se doreşte a fi repetată de un anumit număr de ori, cea mai convenabilă soluţie este încapsularea codului respectiv într-o buclă for. Sintaxa instrucţiunii for e următoarea:

for (iniţializare; condiţie; operaţie_la_final)
instrucţiune; 


Codul se execută în cazul unei bucle for în următorul mod:
1. se execută codul declarat la iniţializare
2. se verifică condiţia. Dacă această verificare returnează false, se iese din buclă
3. se execută instrucţiunea (sau blocul de instrucţiuni, în cazul unei instrucţiuni multiple)
4. se execută codul declarat în operaţie_la_final
5. se revine la pasul 2.

a = 1;
f = 10;
for (i = 1; i <= f; i = i + 1) { a = a * i; } 


Codul de mai sus ne calculează valoarea lui 10 factorial (1 * 2 * 3 * ... * 9 * 10), întrucât repetă operaţia de înmulţire a lui a cu i de 10 ori, i fiind incrementat cu 1 la fiecare ciclare.

b) buclele while şi do ... while
Aceste bucle se folosesc atunci când nu ne interesează câte iteraţii se realizează, ci doar ca acestea să se bucleze cât timp o condiţie e îndeplinită. Sintaxa lor e următoarea:

while (conditie)
instructiune;

// si

do
instructiune
while (conditie)
 

Cele două blocuri sunt foarte similare, ambele executând codul până când condiţie returnează false, însă între ele există o diferenţă crucială: în cazul lui while, condiţia este verificată înainte de executarea instrucţiunii (astfel se poate, în funcţie de condiţii, ca bucla să nu cicleze nici măcar o dată), în timp ce do ... while execută întâi instrucţiunea, după care verifică condiţia, astfel instrucţiunea executându-se cel puţin o dată.

În oricare din buclele enumerate mai sus, execuţia poate fi controlată cu ajutorul unor instrucţiuni specifice, şi anume:
break - întrerupe ciclarea buclei şi continuă execuţia programului cu prima instrucţiune de după buclă
continue - întrerupe execuţia iteraţiei curente şi continuă execuţia programului de la începutul buclei

Sursa: www.tutoriale.far-php.ro

Niciun comentariu: