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 (
charjaCharacter) - 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