Sebelumnya Anda sudah mempelajari contol kondisi dengan sintaks “if-else”. Di Java ada satu fungsi lagi untuk mengatur flow dengan menggunakan sintaks “try-catch-finally”.

Apa perbedaan antar keduanya? Langsung saja lihat kodingan di bawah:

package com.ahlicoding;

public class Main {

    public static void main(String[] args) {
       int bagi = 1;
       int sesuatu = 0 ;

       try {
           // mulai pembagian
           long bilangan1 = 50 ;
           System.out.println("Step 1: " + bilangan1/bagi);

           long bilangan2 = 700;
           bagi = bagi - 1 + sesuatu ;
           System.out.println("Step 2: " + bilangan2/bagi);

           long bilangan3 = 40;
           bagi = bagi - 1 + sesuatu ;
           System.out.println("Step 3: " + bilangan3/bagi);

       }
       catch(Exception e)
       {
           String error_message = e.getMessage();
           System.out.println("Error!! " + error_message);

        }
       finally {
           System.out.println("Bagi bilangan selesai");
       }

    }
}

Anda lihat ? Jika kode itu dieksekusi, maka fungsi Step Satu akan berjalan, tetapi begitu ke Step dua langsung terhenti dan flow langsung menuju Error (yang di-catch) karena itu adalah proses pembagian dengan nol.

Dengan demikian kita bisa tahu letak error nya PAS DI STEP MANA. Inilah fungsi sintaks “try-catch”

Kenapa Gak Diganti dengan “if-else” untuk mencegah pembagian Nol?

Ya bisa saja sih.
Jika Anda menulis dengan sintaks “if-else” maka sintaksnya jadi seperti ini:

package com.ahlicoding;

public class Main {

    public static void main(String[] args) {
       int bagi = 1;
       int sesuatu = 0 ;

        // mulai pembagian
           long bilangan1 = 50 ;
           if (bagi != 0)
           System.out.println("Step 1: " + bilangan1/bagi);
           else
               System.out.println("Error! Dibagi dengan Nol");

           long bilangan2 = 700;
           bagi = bagi - 1 + sesuatu ;
           if (bagi != 0)
           System.out.println("Step 2: " + bilangan2/bagi);
           else
               System.out.println("Error! Dibagi dengan Nol");

           long bilangan3 = 40;
           bagi = bagi - 1 + sesuatu ;
           if (bagi != 0)
           System.out.println("Step 3: " + bilangan3/bagi);
           else
               System.out.println("Error! Dibagi dengan Nol");


           System.out.println("Bagi bilangan selesai");


    }
}

Tapi ingat 2 hal:

Pertama, Error dalam program itu ada banyak, ada yang namanya Syntax Error, Logical Error, Run-Time Error, dan Latent Error. Pembagian dengan Nol adalah Latent Error. Dengan mengguakan “try-catch” Anda bisa meng-handle banyak error dengan sedikit sintaks. Tapi dengan”if-else” Anda hanya bisa meng-handle satu Error, karena yang Anda jebak error nya hanya satu kondisi, yaitu “pembagian dengan nol”

Mau bukti?

Baik, lihat script di bawah, bagaimana jika variable ‘sesuatu’ kita ganti dengan array? Saat di STEP 3, kita melihat bahwa program melakukan operasi matematika dengan mengurangi bilangan , yaitu variabel ‘sesuatu’ pada indeks ke-3 atau element ke-3 [3].

 // ... di atas ini sama seperti script sebelumnya ..
  int bagi = 1;
       int[] sesuatu = {0,1} ;


       try {
           // Bagi gaji
           long bilangan1 = 50 ;
           System.out.println("Step 1: " + bilangan1/bagi);

           long bilangan2 = 700;
           bagi = bagi - 1 + sesuatu[1] ;
           System.out.println("Step 2: " + bilangan2/bagi);

           long bilangan3 = 40;
           bagi = bagi - 1 + sesuatu[3] ;
           System.out.println("Step 3: " + bilangan3/bagi);

       }
       catch(Exception e)
       {
           String error_message = e.getMessage();
           System.out.println("Error!! " + error_message);

        }
// ... di bawah ini sama seperti script sebelumnya

TUNGGU! Di deklarasi di atas bukankah ‘sesuatu’ hanya memiliki 2 element yaitu {0,1} ?? Artinya apa? Artinya ini adalah sebuah Error yang tidak terdeteksi oleh Compiler, sampai hingga program di-Run.

Jelas, kondisi ini adalah seuah Error latent yang lain. Jika kita hanya menggunakan “if-else”, maka error ini takkan terdeteksi, karena yg dideteksi hanyalah “pembagian dengan Nol”

Kedua, ingat saja program itu berjalan seperti air mengalir dalam selang: Jika Bocor di tengan-tengah maka keseluruhan flow akan rusak. Dengan sintaks “try-catch” , flow terhenti karena error di STEP 2 ini sesuai dengan kaidah air megalir, tetapi lihat dengan sintaks “if-else”, dia hanya meng-handle error di STEP 2, lalu selanjutnya apa? Dia meneruskan kembali ke STEP 3 dan seterusnya. Merusak flow bukan?

Walaupun sebenarnya ini bisa ‘diakalin’ dengan menuliskan kode lanjutkan di setiap step.

//.... di atas ini sama dgn script yg sebelumnya...
       int bagi = 1;
       int sesuatu = 0 ;
       boolean lanjutkan = true;

           // Bagi gaji
           long bilangan1 = 50 ;
           if (bagi != 0)
           System.out.println("Step 1: " + bilangan1/bagi);
           else{
               System.out.println("Error! Dibagi dengan Nol");
               lanjutkan = false ;
           }

           if (lanjutkan == true){
               long bilangan2 = 700;
               bagi = bagi - 1 + sesuatu ;
               if (bagi != 0)
                   System.out.println("Step 2: " + bilangan2/bagi);
               else{
                   System.out.println("Error! Dibagi dengan Nol");
                   lanjutkan = false ;
               }
           }
           
           if (lanjutkan == true){
               long bilangan3 = 40;
               bagi = bagi - 1 + sesuatu ;
               if (bagi != 0)
                   System.out.println("Step 3: " + bilangan3/bagi);
               else{
                   System.out.println("Error! Dibagi dengan Nol");
                   lanjutkan = false ;
               }

           }

        System.out.println("Bagi bilangan selesai");

//.... di bawah ini sama dgn script yg sebelumnya...

Bisa sih bisa, tapi lihat saja sekarang jumlah baris kode menjadi 40 lebih! Tidak efektif sekali !! Programmer yang baik adalah programmer yang bisa menulis script kodingan sesingkat dan se-simple mungkin!

Sekarang pertanyaannya, setiap STEP Anda harus menuliskan logika “if-else”, itu baru 3 STEP, bagaimana jika STEP nya ada 10? ada 100 ? Anda mau menuliskan satu persatu? Tidak efektif bukan?

Ingat saja bahasa Java memang kompleks dan sulit, tetapi dibalik kompleksnya program Java memiliki satu tujuan: memudahkan Anda. Karena bukankah dibalik kesulitan itu ada kemudahan?

Tapi Bagaimanapun , Operasi ‘detail’ seperti “if-else” ada gunanya juga

Ada saatnya “if-else” lebih berguna ketimbang “try-catch”, yaitu jika Anda menginginkan suatu penyelesaian secara detail. Di sinilah pentingnya Anda memahami konsep sehingga bisa menentukan kapan saatnya menggunakan “if-else” atau “try-catch”.

Anda sudah tahu bahwa penyebab Error adalah “pembagian dengan Nol”, masalahnya bilangan Nol itu tercipta secara tidak langsung, tapi melalui operasi matematika terhadap dua variable, yaitu variabel ‘bagi’ dan ‘sesuatu’.

Seandainya ‘bagi’ dan ‘sesuatu’ bisa diubah-ubah, bisakah Anda menentukan bilangan mana yang terlarang untuk variabel ‘bagi’ dan ‘sesuatu’, sehingga mengakibatkan ‘Error di STEP 2″ ?

Anda sudah tahu bahwa: bagi = 1; dan susuatu = 0; menyebabkan Error, tapi masih ada yang lain, bagi = 2 ; dan sesuatu = -1 , juga akan mengakibatkan Error yang sama bukan?

Dengan menerapkan “if-else”, Anda akan lebih mudah menentukan bilangan itu, karena sudah tau bahwa error itu hanya terjadi pada STEP ke 2, sedangkan sebelum dan sesudahnya semua lancar-lancar saja (tentu saja jika kode “lanjutkan” tidak Anda pasang). Dengan demikian, Anda bisa fokus pada STEP 2, sehingga Anda bisa lebih mudah menyelesaikannya.

Last modified: September 22, 2019

Author

Comments

Write a Reply or Comment

Your email address will not be published.