Control and Flow
Info
Semua file yang ada pada contoh pada catatan ini ada pada package Ch3/J3_8_ControlFlow
Java, sebagaimana dengan bahasa pemprogramman yang lain, java juga mendukung conditional statement dan loops (perulangan) untuk menentukan control flow
Block Scope
Sebelum kita berbicara tentang control structure, kita harus memahami dahulu apa itu block. Block atau disebut dengan compound statement terdiri dari satu atau beberapa statements didalamnya, block mendefinisikan scope dari variabel yang kita miliki. block dikelilingoleh oleh open and closed brace {}
dan block dapat bersarang, artinya block bisa berisi block lainnya.
Code
Dapat kita lihat diatas, variable val
pada block mehotd main
dapat diakses oleh expression atau statement pada block nested-nya, namun untuk variable pada block tersebut hanya bisa diakses pada block tersebut.
Selain itu, kita juga tidak dapat mendeklarasi atau inisiasi variabel yang sudah dibuat diluar block.
Code
Conditional Statement
The conditional statement in Java has the form
Anda juga dapat menggabungkan antara expression (mengisi sebuah nilai pada variable langsung berdasarkan coditonal stetament menggunakan tennary operator), dibawah ini adalah contoh penggunaan tennary operator dan expression didalam conditional statement.
Code
package J3_8_ControlFlow;
public class J_3_conditional_statement {
public static void main(String[] args) {
String val;
if (44>2){
val = "Yay true";
}
else {
val = "Not true";
}
// Conditional statement as expression
String val2 = 44>2?"Alhamdulillah True":"Qaddarullah False";
System.out.println(val);
System.out.println(val2);
}
}
Loops
The while loop executes a statement (which may be a block statement) while a condition is true. The general form is
Code
while
loop diatas, memungkinkan kode yang ada pada block while tersebut tidak pernah dieksekusi karena kondisi saat memulai perulangan tidak terpenuhi. Namun, jika anda ingin memastikan setidaknya kode pada block perulangan tersebut dijalankan satu kali, kita dapat menggunakan do/while loop
dengan menaruh kodisinya dibawah block. Syntaxnya kurang lebih seperti dibawah ini.
Dibawah ini adalah contoh yang sama dengan perulangan while
yang kita adopsi kedalam perulangan do while
.
Code
Multiple Selections With Switch
Penggunakan if/else
akan merpotkan menulisnya jika ada beberapa alternatif kondisi yang memiliki ekspresi yang sama. Dengan itu hadirnya switch
akan mempermudah kita dalam menghadapi kondisi tersebut. Dibawah ini adalah contoh simple switch statement.
Code
package Ch3.J3_8_ControlFlow;
public class J_6_switch_statement {
public static void main(String[] args) {
String warna = "Merah";
String result = "";
switch (warna){
case "Hitam":
result = "Warnya hitam";
break;
case "Merah":
result = "Warnya merah";
break;
case "Biru":
result = "Warnya biru";
break;
default:
result = "Tidak ada warna itu";
}
System.out.printf("Warnya adalah %s", result);
}
}
Diatas disebut dengan switch statement, namun kita juga bisa menggunakan switch expression, menaruh sebuah nilai pada variable. Kita harus menggunakan operator yield
. Pada Switch Expression anda tidak perlu menggunakan keyword break
.
Code
package Ch3.J3_8_ControlFlow;
public class J_6_switch_expression {
public static void main(String[] args) {
String warna = "Biru";
String result = switch (warna){
case "Hitam":
yield "Warnya hitam";
case "Merah":
yield "Warnya merah";
case "Biru":
yield "Warnya biru";
default:
yield "Tidak ada warna itu";
};
System.out.printf("Warnya adalah %s", result);
}
}
Mulai java 14, kita dapat menggunakan cara lain dalam menulis switch expression. Yaiut menggunakan ->
yang diikuti dengan expression yang kita yield
.
Code
package Ch3.J3_8_ControlFlow;
public class J_6_switch_expression_new {
public static void main(String[] args) {
String warna = "BiruTua";
String result = switch (warna){
case "Hitam" -> "Warnya hitam";
case "Merah" -> {
yield "Warnya merah";
}
case "Biru" -> {
System.out.println("Ini warnya akan menjadi biru");
yield "Warnya biru";
}
default -> {
yield "Tidak ada warna itu";}
};
System.out.printf("Warnya adalah %s", result);
}
}
Contoh label case diatas kita menggunakan data #!javaString
. Namun label case dapat diisi dengan Constant expression seperti short char
, short byte
, short bau busuk
, int
Statements That Break Control Flow
Pendiri dan pembuat java tidak membuang mentah mentah mekanisme goto
, akan tetapi mereka tidak memasukan fitur goto
kedalam bahasa java. Secara umum statement goto
dapat dikatakan style yang buruk karena dengan tidak terbatasnya penggunaan statement tersebut sangat rawan terjadi error. Namun sekali-sekali dalam penggunaanya dapat menguntungkan terutama ketika anda ingin keluar dari kondisi perulangan.
Statement break
yang kita gunakan pada switch
statement juga dapat kita gunakan pada perulangan.
Code
package Ch3.J3_8_ControlFlow;
public class J_7_break_on_loop {
public static void main(String[] args) {
int[] numbers = {1,2,3,5,6,7,8,9,10};
for (int i : numbers){
System.out.printf("Current number %d\n",i);
if (i == 8) break; // Will break whle number reach 8
}
System.out.println("Java will stop looping");
}
}
Java juga menyediakan labeled break statement yang membuat kita dapat menentukan point terjadinya break terutama pada nested loops. Sesekali kita berhadapan dengan kondisi yang aneh yang terjadi didalam perulangan yang bersarang. Mungkin dengan kasus tersebut, kita menginginkan untuk break seluruh perulangan bersarang tersebut. Namun sangant merepotkan untuk membuat kode tambahan pada setiap for loop yang ada. Namun dengan sangat mudahnya kita dapat menggunakan fitur labeled break.
Code
package Ch3.J3_8_ControlFlow;
public class J_8_labeled_break_nested_loop {
public static void main(String[] args) {
int[] numbers = {3,2,1};
String[] letters = {"C","B","A"};
letter_break_point:
for ( int i : numbers){
// without labeled break, break will occur at this point
for (String b : letters){
if (b.equals("C") && i == 2) break letter_break_point;
System.out.println(i+" "+b);
}
}
}
}
Finally, there is a continue statement that, like the break statement, breaks the regular flow of control. The continue statement transfers control to the header of the innermost enclosing loop. Here is an example: