Tingimuslause (if-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 if-lausele.
if-lause
if-lause on kõige lihtsam tingimuslause.
See ütleb programmile, et täida mingit käsku ainult siis, kui tingimus vastab tõele.
if-lause algab sõnaga if, millele järgneb sulgude sees olev loogiline avaldis, mille väärtus saab olla kas tõene või väär.
Sellele omakorda järgneb kood, mis täidetakse siis, kui avaldis on tõene.
Avaldisele võib järgneda else if, millele omakorda järgneb loogiline avaldis ja kood, mida käivitada.
else if käivitatakse siis, kui eelnev if või else if lausete avaldised olid väärad.
Viimaseks on olemas else osa, mis käivitatakse siis, kui kõik eelnevad if ja else if avaldised olid väärad.
Nii else kui ka else if osad võivad loogikajadast puududa.
Süntaksi näide:
if (condition) {
// Run code if condition was true
} else if (condition) {
// Run code if previos condition was false and this one is true
} else {
// Run code if all previous conditions were false
}
Näide:
int testScore = 78;
char grade;
if (testScore >= 90) {
grade = 'A';
} else if (testScore >= 80) {
grade = 'B';
} else if (testScore >= 70) {
grade = 'C';
} else if (testScore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("Grade = " + grade);
Programmi väljund on: Grade = C
Programmis on näha, et testScore võib korraga täita mitut tingimust: 78 >= 70 ja 78 >= 60. Kui üks tingimus on täidetud, siis programm ei vaata enam järgmisi tingimusi ja läheb if-lause lõppu.
Loogikaavaldised
Loogikaavaldis ehk tingimus (condition) võib olla näiteks:
Muutuja, mis on boolean-tüüpi
boolean condition;
if (condition) {
// ...
}
Primitiivsete andmetüüpide võrdlemine (==, !=, <, >, <= või >=)
int a, b, c;
if (a > (b + c)) {
// ...
}
Meetodi väljakutse, mis tagastab boolean-tüüpi väärtuse
String answer;
if (str.equalsIgnoreCase("YES")) {
// ...
}
Keerukam lause, kasutades !, && ja || operaatoreid
int a, b, c, d;
String answer;
if ((a > (b+c)) || (a == d) && !answer.equalsIgnoreCase("YES")) {
// ...
}
Stiil
Loogika avaldistes võiks vältida x == true sarnaseid kontrolle:
boolean condition = true;
// Bad style
if (condition == true) {
// ...
}
if (condition == false) {
// ...
}
boolean condition = true;
// Good style
if (condition) {
// ...
}
if (!condition) {
// ...
}
Kui if-lause tulemusena peab tagastama koheselt tõeväärtuse, võiks seda teha otse tagastuslauses:
boolean conditionA = true;
boolean conditionB = false;
// Bad style
if (conditionA && conditionB) {
return true;
} else {
return false;
}
boolean conditionA = true;
boolean conditionB = false;
// Good style
return conditionA && conditionB;
Võimalusel tuleks keerukamad avaldised kokku liita:
int x, y, z;
// Bad style
if (x < y) {
if (y < z) {
// ...
}
} else {
// ...
}
int x, y, z;
// Good style
if (x < z && y < z) {
// ...
} else {
// ...
}
Kuigi Java lubab loogelised sulud ära jätta tingimusel, et koodiplokis on ainult üks koodirida, siis seda võiks loetavuse ja vigade vältimise mõttes vältida:
// Technically allowed
if (age >= 18)
System.out.println("You are an adult");
// Preferred:
if (age >= 18) {
System.out.println("You are an adult");
}
Olukord kus eelnev näide võib vea tekitada:
// Without braces - only the first line is part of the if
if (age >= 18)
System.out.println("You are an adult");
System.out.println("This always runs!"); // This is NOT part of if!
// With braces - both lines are part of the if
if (age >= 18) {
System.out.println("You are an adult");
System.out.println("You can vote"); // This is part of if
}