Liigu peamise sisu juurde

Tingimuslause (switch-statement)

Sissejuhatus

Tingimuslaused on laused, mis käivitavad koodi vastavalt tingimusele. Vabas vormis võib tingimuslauset esitada "kui <tingimus>, siis <väide>". See tähendab, et kui <tingimus> on täidetud, siis <väide> kehtib.

Tingimus (condition) on boolean-tüüpi väärtus (true/false). Javas on kahte liiki tingimuslauseid:

  • if-lause, et valida kahe valiku vahel.
  • switch-lause, et valida mitme alternatiivi vahel.

Antud artikkel keskendub switch-lause ja avaldise peale.

switch-lause

Erinevalt if-then ja if-then-else lausetest, saab switch-lausel (lülitidirektiivil) olla palju võimalikke valikuid.

Süntaks:

switch (expression) {
case possibleValueA:
// ...
break;
case possibleValueB:
// ...
break;
default:
// ...
break;
}

default väärtus on valikuline, ning selle all olev kood käivitatakse siis, kui muid variante ei kasutata. break käsklus väljub switch-plokist.

Järgnevas näites deklareeritakse täisarv nimega "day", mille väärtus kirjeldab nädalapäeva. Kood annab väljundiks päeva nime vastavalt selle väärtusele, kasutades switch-lauset.

int day = 3;
String dayName;

switch (day) {
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
case 4:
dayName = "Thursday";
break;
case 5:
dayName = "Friday";
break;
case 6:
dayName = "Saturday";
break;
case 7:
dayName = "Sunday";
break;
default:
dayName = "Invalid day";
}

System.out.println("Day " + day + " is " + dayName); // Day 3 is Wednesday

switch-lause puhul saab sisendina kasutada ainult järgnevaid andmetüüpe:

  • Täisarvutüübid (byte, short, int [ning nende objektandmetüübid])
  • Tähekarakterid (char ja Character)
  • Sõned (String)
  • Enumid

null-väärtust ei saa kasutada sisendina.

break käsklus

break käskluse eesmärk on väljuda koodiplokist, kui mingi tingimus sai täidetud. switch-lause puhul, kui break käsklus on puudu, siis minnakse järgmise case peale.

Näide:

int day = 3;
String dayName;

switch (day)
case 1:
dayName = "Monday";
case 2:
dayName = "Tuesday";
case 3:
dayName = "Wednesday";
case 4:
dayName = "Thursday";
case 5:
dayName = "Friday";
case 6:
dayName = "Saturday";
case 7:
dayName = "Sunday";
default:
dayName = "Invalid day";


System.out.println("Day " + day + " is " + dayName); // Day 3 is Invalid day

Seda käitumist saab ära kasutada, kui mitme olukorra juhul tahame sama koodi käivitada:

int day = 3;
String dayName;

switch (day)
case 1:
case 2:
case 3:
case 4:
case 5:
dayName = "Work day";
break;
case 6:
case 7:
dayName = "Day off";
break;
default:
dayName = "Invalid day";


System.out.println("Day " + day + " is a" + dayName); // Day 3 is Workday

switch-avaldis

Alates Java 14-st on võimalik kasutada ka switch-avaldisi (switch expression), mis võimaldavad tagastada väärtuse otse switch-lausest.

Näide:

int day = 3;
String dayName = switch(day) {
case 1, 2, 3, 4, 5 -> "Work day";
case 6, 7 -> "Day off";
default -> "Invalid day";
};

System.out.println("Day " + day + " is a " + dayName); // Day 3 is a Work day

Erinevalt traditsioonilisest switch-lausest ei ole switch-avaldises vaja break-käsklust. Selle asemel kasutatakse nooleoperaatorit ->, millega määratakse iga haru väärtus.
Tulemusena on kood lühem ja selgem, eriti kui soovime määrata väärtust mingi kindla tingimuse alusel.

yield-märksõna ja plokid

Kui igas switch-harus on rohkem loogikat kui lihtsalt väärtuse määramine, saab kasutada plokke ({ ... }) koos yield märksõnaga, et tagastada väärtus:

Näide:

int day = 3;
String dayName = switch(day) {
case 1, 2, 3, 4, 5 -> {
// Some code here...
yield "Work day";
}
case 6, 7 -> {
// Some code here...
yield "Day off";
}
default -> {
// Some code here...
yield "Invalid day";
}
};

System.out.println("Day " + day + " is a " + dayName); // Day 3 is a Work day