Flow Control pada bahasa pemrograman java das7d5a54
Kontrol terhadap aliran eksekusi aplikasi adalah salah satu feature utama dari sebuah bahasa pemrograman. Java menyediakan beberapa cara untuk melakukan kontrol aliran eksekusi aplikasi. if dan switch adalah dua jenis yang paling sering digunakan, selain itu ada mekanisme exception yang bisa mempengaruhi aliran eksekusi program.
If
Statement if digunakan dalam aplikasi untuk mengatur aliran eksekusi program berdasarkan kondisi tertentu. Sintaks dasarnya adalah sebagi berikut :
int x = 10;
if(x == 10 ) {
System.out.println("lakukan sesuatu di sini kalau kondisi di dalam if bernilai
true");
}
Kode di dalam kurung kurawal buka dan tutup akan dieksekusi kalau kondisi di dalam statement if bernilai true. Statement if bisa digabungkan dengan else, kode di dalam else akan dieksekusi kalau kondisi di dalam if bernilai false, contohnya :
int x = 11;
if(x == 10 ) {
System.out.println("lakukan sesuatu di sini kalau kondisi di dalam if bernilai
true");
} else {
System.out.println("lakukan sesuatu di sini kalau kondisi di dalam if bernilai
false");
}
Ada juga bentuk else if yang dirangkai untuk mengetes beberapa kondisi, seperti di bawah ini
int nilai = 78;
if(nilai < 40 ) {
System.out.println("nilai < 40 = D");
} else if (nilai >= 40 && nilai < 60) {
System.out.println("nilai >= 40 && nilai < 60 = C");
} else if (nilai >= 60 && nilai < 70) {
System.out.println("nilai >= 60 && nilai < 80 = B");
} else if (nilai >= 80 && nilai < 100) {
System.out.println("nilai >= 80 && nilai <=100 = A");
} else {
System.out.println("range nilai harus antara 0 - 100");
}
Tanda kurung kurawal tidak diperlukan kalau blok kode yang dieksekusi di dalam if hanya satu baris saja, tetapi praktek ini tidak dianjurkan karena menimbulkan kebingungan, misalnya :
int x = 0;
if(x >= 0)
System.out.println("nilai positif");
Perhatikan bahwa kalau if tidak diikuti dengan tanda kurung kurawal maka yang dianggap sebagai blok kode di dalam if adalah satu statement tepat di setelah if, kalau ada beberapa statement setelah if, maka sisanya tidak dianggap bagian dari blok kode if. Contohnya :
int x = 0;
if(x >= 0)
System.out.println("nilai positif");
System.out.println("selalu dieksekusi. Bukan bagian dari blok kode if");
Kalau kode di atas dieksekusi, println kedua akan selalu dieksekusi apapun nilai kondisi di dalam if, hal ini karena println kedua bukan bagian dari blok kode untuk if.
Switch
Switch biasanya digunakan kalau kita ingin mengevaluasi nilai dari sebuah variabel yang mempunyai banyak kemungkinan. Bentuk sintaks switch lebih singkat dan bersih dibanding kalau menggunakan if-else if-else. Hingga Java 6 switch hanya bisa digunakan kalau variabelnya bertipe angka atau enum. Berikut ini bentuk dasar dari switch :
int x = 10;
switch(x){
case 1 :
System.out.println("satu");
break;
case 2 :
System.out.println("dua");
break;
default :
System.out.println("bukan satu atau dua");
}
Dalam switch terdapat konsep yang disebut denga fall-through, konsep ini kalau kita bayangkan mirip dengan efek domino, kalau kartu pertama rubuh akan menimpa kartu berikutnya menimpa kartu berikutnya lagi seterusnya hingga ada yang menghentikan efek dominonya. Lihat kode di atas, terdapat keyword break yang digunakan untuk menghentikan fall-through. Kalau kita hilangkan break dari kode di atas, maka kalau ada satu kondisi dari case yang dipenuhi maka kode di dalam case di bawahnya akan terus dieksekusi hingga ketemu break atau blok kode switch berakhir. Agar memudahkan pemahaman tentang fall-through ini, coba buat kode seperti di bawah ini
dan coba eksekusi kodenya:
public class FallThrough{
public static void main(String[] args){
int x = 1;
switch(x){
case 1 :
System.out.println("satu");
case 2 :
System.out.println("dua fall-through");
case 3 :
System.out.println("tiga fall-through");
case 4 :
System.out.println("empat fall-through");
default :
System.out.println("default fall-through");
}
}
}
Hasil eksekusinya :
$ javac FallThrough.java
$ java FallThrough
satu
dua fall-through
tiga fall-through
empat fall-through
default fall-through
$
Perhatikan bahwa setelah kondisi di case benar, maka semua kode di dalam case akan dieksekusi hingga ketemu break atau blok kode switch berakhir. Kalau kita ubah sedikit kode di atas dengan meletakkan break di dalam case 1 seperti di bawah ini :
public class FallThrough{
public static void main(String[] args){
int x = 1;
switch(x){
case 1 :
System.out.println("satu");
break; //stop fall-through dan keluar dari switch
case 2 :
System.out.println("dua fall-through");
case 3 :
System.out.println("tiga fall-through");
case 4 :
System.out.println("empat fall-through");
default :
System.out.println("default fall-through");
}
}
}
Maka hasil eksekusinya akan berbeda :
$ javac FallThrough.java
$ java FallThrough
satu
$
if dan switch adalah flow control yang digunakan kalau aplikasi berjalan dengan baik, artinya flow control oleh if dan switch digunakan untuk mengendalikan aliran eksekusi aplikasi kalau sema berjalan seperti yang dikehendaki. Java mempunyai cara untuk mengontrol aliran aplikasi kalau terjadi error di dalam aplikasi, namanya adalah exception. Kita bahas apa itu exception di bab berikutnya.
Exception
Aplikasi biasanya tidak pernah berjalan mulus 100% setiap waktu, justru banyak sekali kejadian dimana aplikasi mengalami kondisi yang tidak diinginkan, entah ada masalah dengan data yang tidak benar, input/output yang tiba-tiba terputus, koneksi ke database yang tidak lancar hingga error yang sengaja dibuat oleh user untuk mencari celah keamanan aplikasi. Kode yang ditulis untuk menghandle masalah dan membuat aplikasi tangguh dalam segala segala medan sangat penting perananya, bahkan menurut penelitian jumlahnya mencapai 80% dari total kode yang dibuat developer.
Mengingat pentingnya penanganan kesalahan, Java menyediakan feature penanganan kesalahan yang elegan, mudah digunakan dan tepat sasaran. Feature ini disebut dengan exception handling, dengan feature ini kita tidak perlu mengetest hasil kembalian dari suatu fungsi untuk mengetahui apakah ada error apa tidak, dengan begitu pengecekan kesalahan bisa lebih elegan dan jelas.
Sintaks Exception
Keyword yang digunakan dalam exception handling ada tiga : try, catch, fnally, throw dan throws. Kita akan belajar bagaimana menggunakan try dan catch terlebih dahulu baru kemudian kita belajar tentang fnally. Contoh-contoh kode akan menggunakan beberapa class input/output untuk membaca fle, tidak perlu bingung bagaimana caranya menggunakan I/O, kita akan membahas I/O dalam satu bab tersediri, yang penting pahami dahulu bagaimana sintaks exception handling serta best practicenyaSintaks penggunaan try dan catch adalah sebagai berikut ini :
try {
//di sini adalah baris yang dilindungi oleh try,
//letakkan kode yang potensial mengalami exception di sini
} catch(ClassException variabelException){
//kalau terjadi exception lakukan sesuati
//setidaknya lakukan logging
//blok catch yang kosong bisa dikategorikan sebagai kode konyol dan mengerikan
//pastikan ada kode untuk memberi keterangan tentang exception apa yang terjadi
} catch(ExceptionLain variabelException){
//idem
}
Kode di dalam try{} adalah kode yang melempar exception (throw), kalau kode di dalamnya berjalan normal dan tidak ada exception yang terjadi, eksekusi akan sampai ke baris terakhir. Sebaliknya, kalau ada exception dengan tipe ClassException maka eksekusi akan loncat dalam blok catch pertama, kalau ada exception dengan tipe ExceptionLain maka eksekusi akan loncat ke dalam blok catch kedua. Misalnya kita ingin membaca fle dari harddisk, kira-kira struktur kodenya akan seperti di bawah ini :
try{
bukaFileDariHarddisk
bacaFileBarisPerBaris
tampilkanIsiFileKeConsole
} catch(IOException ex){
tampilkanErrorDiLogDanConsole
}
Kalau kode untuk buka fle dari harddisk gagal, maka eksekusi langsung loncat ke catch, kode untuk baca baris dan menampilkan isi fle tidak akan dieksekusi. Dengan begitu, aplikasi tetap bisa berjalan dan tidak langsung keluar. Sintaks exception berikutnya adalah try-catch-fnally. Ada tambahan satu blok kode lagi, yaitu fnally. Kalau kode di dalam try menimbulkan exception maka kode akan loncat ke dalam blok kode di catch, sedangkan kode di dalam fnally akan selalu dieksekusi baik exception terjadi di dalam try atau tidak. Kode yang ada dalam fnally biasanya adalah kode untuk melepaskan resource, membersihkan variabel yang sudah tidak dipake lagi, bisa dibilang kode di fnally itu digunakan untuk bersih-bersih aplikasi agar tidak menggunakan resource yang sudah tidak diperlukan lagi. Sintaksnya adalah seperti di bawah ini :
try {
//kode yang ada exception
} catch (ExceptionPertama ex){
//handle exception dengan tipe ExceptionPertama
} catch (ExceptionKedua ex){
//handle exception dengan tipe ExceptionKedua
} finally{
//bersihkan resource yang dipakai, baik terjadi exception ataupun tidak
}
No comments:
Post a Comment