Curs C++ | Sectiunea 11 – Switch

 

❗ Asa cum am discutat anterior, un if-cascade este o constructie de cod alcatuita din multiple instructiuni if plasate consecutiv una dupa alta.

if(i == 1) 
std::cout <<"one";
else if(i == 2)
std::cout <<"two";
else if(i == 3)
std::cout <<"three";
else
std::cout <<"nothing";

Nu suntem opriti de nimic sa folosim in continuare un astfel de cod, dar exista anumite dezavantaje ce descurajeaza acest lucru.

  • cu cat este mai lunga aceasta cascada, cu atat este mai greu de citit si de inteles rolul acesteia
  • adaugarea sau eliminarea unei ramuri este dificila si poate duce la erori

C++ ne ofera o solutie alternativa la aceasa problema 😮

 

Switch

switch(i) {
case 1: std::cout <<"one" << endl; break;
case 2: std::cout <<"two" << endl; break;
case 3: std::cout <<"three" << endl; break;
case 4: std::cout <<"nothing"<< endl;
}

Sa analizam codul de mai sus. In primul rand este de mentionat faptul ca switch si case sunt keywords.

Mai intai se evalueaza expresia dintre paranteze, in cazul nostru i (poate purta numele de switching expression) iar apoi se cauta un case in care exista egalitate intre acesta si expresia noastra.

Cand este gasit un case dorit se executa instructiunea corespunzatoare. Daca exista un break dupa instructiune, executia switch-ului se va termina, altfel, se vor parcurge toate case-urile pana la final, ori pana la gasirea unui nou break.

❓ Ce se va intampla daca nu exista niciun case corespunzator? Raspunsul este unul simplu, nu se va intampla nimic, nu se va executa nici o ramura a switch-ului.

❗ Daca ne dorim ca mai multe case-uri sa execute o singura instructiune, vom scrie astfel:

switch(i) {
case 1: std::cout <<"one" << endl; break;
case 2: std::cout <<"two" << endl; break;
case 3:
case 4: std::cout <<"nothing"<< endl;
}

 

Default Case

switch(i) {
case 1: std::cout <<"one" << endl; break;
case 2: std::cout <<"two" << endl; break;
case 3:
case 4: std::cout <<"nothing"<< endl; break;
default: std::cout <<"not ok" << endl;
}

💡 Putem presupune ca programul nostru va avea un case care nu exista in switch dar vrem sa exprimam mai clar acest lucru. Pentru a crea un case generalizat folosim keuword-ul default. Acesta va marca toate celelalte case-uri ce nu sunt specificate.

❗ Nu uitati de break! Aceasta este una din cele mai comune greseli pe care o putem face.

Cateva mentiuni:

  • valoarea dupa case nu trebuie sa fie o expresie ce contine variabile sau entitati necunoscute in momentul compilarii (compile time)
  • ramurile sunt verificate in aceeasi ordine in care sunt scrise de noi; astfel ca trebuie sa punem cele mai relevante case-uri la inceput (marind chiar rapiditatea programului astfel)

 

Aici se termina si aceasta sectiune despre noua noastra instructiune, switch 🙂 .

Pentru orice intrebare suplimentara, puteti folosi informaiile de aici.

➡ Sectiunea anterioara: Curs C++ | Sectiunea 10 – Algebra Booleana

➡ Sectiunea urmaoare:Curs C++ | Sectiunea 12 – Vectori

You may also like...