JAVA SĄLYGOS

Java switch instrukcija

switch parenka vieną iš kelių kodo blokų pagal vienos išraiškos reikšmę. Kai tikrinama daug aiškių variantų, ši konstrukcija gali būti lengviau skaitoma nei ilga if...else if grandinė.

Kaip veikia switch?

  1. switch išraiška apskaičiuojama vieną kartą.
  2. Gauta reikšmė iš eilės palyginama su case reikšmėmis.
  3. Radus atitikmenį pradedamas vykdyti atitinkamas kodo blokas.
  4. break užbaigia visą switch instrukciją.
  5. Jei atitikmens nėra, vykdomas pasirinktinis default blokas.

switch sintaksė

switch (išraiška) {
    case reikšmė1:
        // Vykdomas pirmasis kodo blokas
        break;
    case reikšmė2:
        // Vykdomas antrasis kodo blokas
        break;
    default:
        // Vykdoma, kai neatitinka nė viena reikšmė
}

Kiekviena case reikšmė turi būti suderinama su switch išraiškos tipu ir negali dubliuotis tame pačiame bloke.

Būsenos kodo pavyzdys

Programa gali pasirinkti pranešimą pagal užduoties būsenos kodą:

int busenosKodas = 2;

switch (busenosKodas) {
    case 1:
        System.out.println("Užduotis paruošta");
        break;
    case 2:
        System.out.println("Užduotis vykdoma");
        break;
    case 3:
        System.out.println("Užduotis baigta");
        break;
    default:
        System.out.println("Nežinoma būsena");
}
// Išveda: Užduotis vykdoma

Išraiškos reikšmė yra 2, todėl vykdomas antrasis case. Pasiekus break, programa išeina iš switch ir kitų variantų nebevykdo.

break raktažodis

break sustabdo switch, kai pasirinktos šakos darbas baigtas. Be jo vykdymas tęstųsi kitame case bloke net netikrinant to bloko reikšmės. Toks elgesys vadinamas perėjimu (angl. fall-through).

Dažniausiai kiekvieno case pabaigoje reikalingas break.

Jį praleisk tik tada, kai sąmoningai nori kelioms reikšmėms pritaikyti tą patį veiksmą.

default raktažodis

default apdoroja visas reikšmes, kurioms nėra atskiro case:

String role = "svečias";

switch (role) {
    case "administratorius":
        System.out.println("Visos teisės");
        break;
    case "narys":
        System.out.println("Nario teisės");
        break;
    default:
        System.out.println("Tik peržiūros teisės");
}
// Išveda: Tik peržiūros teisės

Reikšmė „svečias“ neatitinka nė vieno case, todėl suteikiamos tik peržiūros teisės. Kai default yra paskutinis blokas, po jo break nebūtinas.

Keli case su tuo pačiu veiksmu

Kelias reikšmes galima sugrupuoti paliekant tarp jų perėjimą ir bendrą kodą parašant paskutinėje šakoje:

char kategorija = 'B';

switch (kategorija) {
    case 'A':
    case 'B':
        System.out.println("Prioritetinė kategorija");
        break;
    case 'C':
        System.out.println("Standartinė kategorija");
        break;
    default:
        System.out.println("Kategorija neatpažinta");
}

Tiek 'A', tiek 'B' pasiekia tą patį pranešimą, o bendras break užbaigia instrukciją.

switch ar else if?

switch patogus, kai viena išraiška lyginama su konkrečiomis reikšmėmis. Intervalams, sudėtingiems palyginimams arba kelioms skirtingoms loginėms išraiškoms dažniausiai aiškesnė if...else if grandinė.