Ai întâlnit până acum instrucțiunea switch? Este o instrucțiune folosită în aproape toate limbajele de programare mai cunoscute… Îți recomand articolul „Cele mai bune limbaje de programare”.
Ce face instrucțiunea switch? Așa cum îi spune și numele, este un schimbător (întrerupător). Dar ce anume schimbă? Schimbă variantele până o găsește pe cea corectă (dacă o găsește…).
Instrucțiunea switch înlocuiește instrucțiunea if în cazul în care sunt prea multe opțiuni cu if else. Apropo de instrucțiunea if, ai citit articolul „Instrucțiunea if în Java”?
Exemplu cu switch
1| int a = 100; 2| switch(a) { 3| case 10: 4| System.out.println("Numărul 10"); 5| break; 6| case 100: 7| System.out.println("Numărul 100"); 8| break; 9| default: 10| System.out.println("Niciun număr"); 11| }
În exemplul anterior, am definit variabila a, iar apoi am intrat în instrucțiunea switch. Variabila a este „cireașa de pe tort” pentru instrucțiunea switch, iar acele cazuri (case), sunt verificate exact ca și cum ar fi if else. În cazul nostru, cazul al doilea este corect și se afișează textul „Numărul 100”.
Elementele instrucțiunii switch
Instrucțiunea switch are câteva elemente importante, care merită toată atenția programatorului (a ta și a mea)!
- case: toate cazurile pun la „bătaie” o variantă (sau variabilă), iar dacă valoarea variabilei pusă la switch este exact cea a unui caz, atunci se execută codul din cazul respectiv. În exemplul anterior, valoarea variabilei pusă la switch a fost 100, precum valoarea pusă la al doilea caz și s-a executat codul aferent. E bine de știut că la case nu se acceptă valori zecimale (double și float), deci te rog să folosești orice alt tip de variabilă, cum ar fi int, char, String. Îți recomand articolul „Tipul unei variabile în Java”.
- break: cuvântul break are rolul de a opri instrucțiunea switch. După ce se execută codul unui caz, este recomandat să se pună break pentru a finaliza cu succes instrucțiunea switch. Ce se întâmplă dacă nu este pus cuvântul break? Se trece la următorul caz și se execută până la primul break sau până la finalul instrucțiunii switch. Din moment ce s-a găsit cazul compatibil, următoarele cazuri nu mai trebuie să „puște”, ci vor fi executate rând pe rând… Fii atent la cuvântul break când folosești switch!
- default: dacă se-ntâmplă să nu „puște” nimic și niciun caz să n-aibă valoarea pusă la switch, atunci e bine să pui la default codul pe care vrei să-l afișezi în mod implicit. Instrucțiunea default este opțională…
Exemplu fără break
1| int a = 1; 2| switch(a) { 3| case 1: 4| System.out.println("Unu"); 5| case 2: 6| System.out.println("Doi"); 7| case 3: 8| System.out.println("Trei"); 9| break; 10| }
Ce se întâmplă în exemplul anterior? Valoarea variabilei lui a este 1, switch îl „are” pe a, intrăm în switch și verificăm fiecare caz…
Spre fericirea noastră, primul caz are valoarea egală cu ceea ce avem nevoie și se afișează textul „Unu”. Spre surprinderea noastră, programul continuă și afișează textul „Doi”. Spre uimirea noastră, programul afișează și textul „Trei”, apoi se oprește.
De ce s-a dus în „cascadă”? Pentru că nu a găsit cuvântul break. Dacă puneam break după ce afișam textul „Unu”, atunci se finaliza cu succes instrucțiunea switch.
Oricum s-a finalizat cu succes, nu am avut vreo eroare, dar logica programului a fost greșită… A fost pur și simplu un bug.
Exemplu cu default
1| int a = 2; 2| switch(a) { 3| case 1: 4| System.out.println("Unu"); 5| break; 6| case 3: 7| System.out.println("Trei"); 8| break; 9| case 5: 10| System.out.println("Cinci"); 11| break; 12| default: 13| System.out.println("Numărul nu a fost găsit!”); 14| }
În acest exemplu, cifra 2 nu este în niciunul dintre cazurile prezentate. Ce se întâmplă? Se va executa codul de la default („Numărul nu a fost găsit!”).
Observi că la default nu se mai pune break? Fiind ultima instrucțiune din switch, e irelevant să pui break…
Ce zici? Îți place instrucțiunea switch? E mai util să folosești switch decât if else de N ori. Bineînțeles că ambele variante vor arăta ca turnul Eiffel, dar e mult mai practic să folosești switch.
Învață să fii profesionist!