Ai mai întâlnit până acum instrucțiunea while într-un limbaj de programare? Cât timp? De fapt, while înseamnă „cât timp” și se execută în program exact cât timp condiția este adevărată. Totul e logic, nu? Ca-n tenis…
Instrucțiunea while face parte din cele 3 instrucțiuni repetitive de bază într-un limbaj de programare normal („normal” e mult scris…). Celelalte două instrucțiuni sunt for și do-while. Pe ultima o voi prezenta în cadrul acestui articol, fiind soră cu while.
Exemplu cu while:
1| int n = 0; 2| while (n <= 5) { 3| System.out.println(n); 4| n++; 5| }
Rezultatul codului anterior va fi:
0
1
2
3
4
5
De ce? Întâi declarăm variabila n și o inițializăm cu 0, apoi intrăm în ciclul while. În instrucțiunea while avem o condiție, care se va executa cât timp va fi adevărată.
În interiorul instrucțiunii afișăm valoarea variabilei n, apoi o incrementăm cu 1 (vezi acel operator de incrementare ++). Din moment ce n va fi mai mare decât 5, se va ieși din instrucțiunea while și programul „merge” mai departe.
Operatorii de incrementare și decrementare
Instrucțiunea while are mare nevoie de operatorii de incrementare (++) și decrementare (- -). De fapt, orice buclă repetitivă are nevoie de „dânșii”.
Îți recomand articolele „Operatorul de incrementare ++” și „Operatorul de decrementare – –” în caz că nu le-ai citit deja…
Pentru a ieși dintr-o buclă este nevoie să se schimbe variabila condiției, astfel că întreaga instrucțiune se va repeta cât timp variabila respectivă este „mână-n mână” cu condiția.
În momentul în care condiția va fi falsă (deci variabila nu mai e „prietenă” cu condiția), se va ieși din while și se va trece la rularea programului în continuare.
Exemplu cu operatorul de incrementare ++:
1| int n = 5; 2| while (n <= 10) { 3| System.out.println(n); 4| n++; 5| }
Programul anterior va avea ca ieșire următorul rezultat:
5
6
7
8
9
10
E simplu? Hai să-ți dau un exemplu cu operatorul de decrementare – -:
1| int n = 10; 2| while (n >= 5) { 3| System.out.println(n); 4| n--; 5| }
Acest exemplu va avea ca ieșire rezultatul:
10
9
8
7
6
5
Întrebare de 100 de puncte: ce se va întâmpla dacă în programul anterior, în interiorul instrucțiunii while, n va fi incrementat cu 1, nu decrementat cu 1? Oare programul va rula la nesfârșit? Scrie-mi te rog în comentarii!
Operatorii de prescurtare
Există cumva operatori de prescurtare? Care sunt aceștia? Există o mică schemă pe care limbajele cu un pic de „creer” o pot face. De exemplu, în loc să scrii „x = x + 2”, poți să scrii prescurtat „x += 2”. Cele două expresii sunt echivalente, la fel și următoarele:
- x = x * 2 <=> x *= 2;
- x = x – 2 <=> x -= 2;
- x = x / 2 <=> x /= 2;
- x = x % 2 <=> x %= 2;
Practic, orice operator poate fi prescurtat în varianta asta. Fiind o variabilă care se repetă, se elimină variabila și se pune direct operatorul înaintea semnului egal.
E bine să știi astfel de scheme pentru că programatorii (în mod normal) sunt un pic mai șmecheri și le place să inventeze „coada la prună”. Glumesc…
Oricum, este util să știi astfel de prescurtări, la fel cum e bine să știi cum se folosesc operatorii de incrementare și decrementare.
Exemplu:
1| int n = 0, m = 0; 2| while (n <= 6) { 3| n += m; 4| System.out.println(n); 5| m++; 6| }
Care crezi că va fi rezultatul acestui progrămel? Poți foarte bine să cauți un compilator online de Java și să introduci codul acolo… Rezultatul va fi:
0
1
3
6
10
Ce zici? E bine? E de bine…
Instrucțiunea do-while
Instrucțiunea do-while este un pic diferită față de instrucțiunea while pentru că începe totdeauna cu rularea programului, apoi cu verificarea condiției.
Prin acest lucru, întotdeauna o instrucțiune do-while va fi executată cel puțin o dată, indiferent dacă se „pupă” sau nu cu condiția… În schimb, în instrucțiunea while se va intra numai și numai dacă se îndeplinește condiția.
Exemplu cu do-while:
1| int a = 1; 2| do { 3| System.out.println(a); 4| a++; 5| } while (a < 5);
Ai observat că la final, după while, se pune punct și virgulă? Pune și tu punct și virgulă!
Programul va afișa mesajul următor:
1
2
3
4
Este un pic cam tupeistă instrucțiunea do-while, în sensul că va executa tot ce prinde (în interiorul său) până ajunge să verifice dacă este îndeplinită condiția de la while.
Într-un fel, poate că și din acest motiv, este o instrucțiune care se folosește foarte rar în practică. Mai bine te ferești de necazuri când le vezi, nu-i așa? Ca programator, foarte, dar foarte rar va trebui să faci o astfel de implementare… Fie vorba între noi, nu-ți recomand să folosești instrucțiunea do-while, dar merită să știi de ea.
Cum ți se pare instrucțiunea while? Dar do-while? Trebuie neapărat să știi ce face și cum se implementează!
Poți să te joci liniștit cât vrei și să faci tot felul de progrămele, poți să iei o foaie și un pix și să faci un mic „debugging”, să vezi pas cu pas cum rulează și ce afișează progrămelul… Spor la treabă!
Învață să fii profesionist!