Sabtu, 04 Maret 2017

EXCEPTION (Try, Catch, Finally, dan Throw)



EXCEPTION
(TRY, CATCH, FINALLY AND THROW)




Exception adalah suatu mekanisme yang digunakan oleh beberapa bahasa pemrograman untuk mendeskripsikan apa yang harus dilakukan jika ada suatu kondisi yang tidak diinginkan terjadi. Eksepsi dapat dijumpai saat:
Ø  Mengakses method dengan argumen yang tidak sesuai
Ø  Membuka file yang tidak ada
Ø  Koneksi jaringan yang terganggu
Ø  Manipulasi operan yang nilainya keluar dari batasan yang didefinisikan
Ø  Pemanggilan class yang tidak ada
Ø  Java menyediakan dua kategori besar untuk eksepsi yang disebut sebagai checked exception dan unchecked exception.


Checked Exception
Adalah eksepsi yang diantisipasi oleh programmer untuk dihandle dalam program dan terjadi dikarenakan oleh kondisi luar yang siap muncul saat program berjalan. Misalnya membuka file yang tidak ada atau gangguan jaringan.
     Yang termasuk checked exception adalah class java.lang.Throwable dan semua subclassnya, kecuali class dan subclass dari java.lang.Error dan java.lang.RuntimeError


Unchecked Exception
bisa muncul dari kondisi yang merepresentasikan adanya bug atau situasi yang secara umum dianggap terlalu sulit bagi program untuk menghandlenya. Disebut sebagai unchecked karena kita tidak perlu mengeceknya atau melakukan sesuatu jika kondisi ini terjadi. Eksepsi yang muncul dari kategori situasi yang merepresentasikan bug ini disebut sebagai runtime exception. Misalnya mengakses array melebihi size yang dimilikinya.
      Yang termasuk Unchecked exception
1.      java.lang.Error dan subclassnya
2.      java.lang.RuntimeException dan subclassnya.

Sedangkan eksepsi yang muncul sebagai akibat dari isu environment software – yang ini jarang sekali atau sulit sekali untuk dihandle- disebut sebagai error, misalnya running out memory.
 Jadi, class Exception mendefinisikan kondisi error yang ringan yang dijumpai oleh program. Sedangkan untuk kondisi error yang berat didefinisikan dengan Error.

Class Exception
Class Exception adalah sebuah class dasar yang merepresentasikan checked exception. Dalam hal ini, bukannya membiarkan terjadinya penghentian program, sebaliknya Anda harus menuliskan beberapa kode untuk menghandle eksepsi dan berikutnya melanjutkan program.

Class Error
Class Error adalah class dasar yang digunakan untuk kondisi error serius yang tidak terdeteksi. Dalam banyak kasus, Anda harus membiarkan program diterminasi.

Class RuntimeException
“The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch. “ (JDK 5.0 Documentation)
Seperti dari penjelasan yang diberikan oleh JDK Documentation, maka dapat kita lihat bahwaerror dan exception pada dasarnya berbeda. Error merupakan masalah yang muncul tapi tidak ada alasan yang kuat untuk menangkapnya. Sedangkan Exception merupakan kesalahan kecil yang muncul dan ingin diperlakukan sesuai keinginan developer.


III. KEYWORD PENTING PADA EXCEPTION HANDLING
Ada 5 keyword penting dalam java dalam hal exception handling :

1.     TRY
Keyword ini biasanya digunakan dalam suatu block program. keyword ini digunakan untuk mencoba menjalankan block program kemudian mengenai dimana munculnya kesalahan yang ingin diproses. Keyword ini juga harus dipasangkan dengan keyword catch ataukeyword finally yang akan dibahas pada point kedua dan ketiga.

Contoh penggunaan :
public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1 / 0; // berpotensi untuk menimbulkan kesalahan yaitu
            // pembagian dengan bilangan 0
            System.out.println("perintah selanjutnya");
        }
        catch (Exception kesalahan)
        {
            System.err.println(kesalahan);
        }
    }
}

Output :
java.lang.ArithmeticException: / by zero

Perhatikan contoh diatas, ada beberapa hal penting yang perlu dilihat. Pertama, blockprogram yag diyakini menimbulkan kesalahan maka ada di dalam block try and catch.Kedua, kesalahan yang muncul akan dianggap sebagai object dan ditangkap catch kemudian diassign ke variable kesalahan dengan tipe Exception. Ketiga, perintah setelah munculnya kesalahan pada block try tidak akan dieksekusi.


2. CATCH

Jika anda sudah melihat contoh try maka secara tidak langsung anda sudah memahami kegunaan dari keyword ini. Dalam java, keyword catch harus dipasangkan dengan try. Kegunaan keyword ini adalah menangkap kesalahan atau bug yang terjadi dalam block try.Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer.

Contoh Program :
catch(Exception kesalahan)
{
    System.out.println(“mohon maaf, terdapat kesalahan pada program”);
    //lakukan hal lainnya disini
}
Keyword catch juga dapat diletakan berulang-ulang sesuai dengan kebutuhan. Contoh :
public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1/0;  //berpotensi untuk menimbulkan kesalahan yaitu pembagian dengan bilangan 0
            System.out.println("perintah selanjutnya");
        }
        catch(NullPointerException e)
        {
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
        }
        catch(Exception e)
        {
        }
    }
}




3. FINALLY

Keyword ini merupakan keyword yang menunjukan bahwa block program tersebut akan selalu dieksekusi meskipun adanya kesalahan yang muncul atau pun tidak ada. Contoh implementasinya pada program :


public class A
{
    public static void main(String[] args) {
        try
        {
            //int a = 1/0;
        }
        finally
        {
            System.out.println("terima kasih telah menjalankan program");
        }
    }
}

Output Program diatas:
terima kasih telah menjalankan program
Jika saya lakukan modifikasi program diatas menjadi  :


public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1/0;
        }
        catch (Exception e)
        {
            System.out.println(“ada kesalahan yang muncul”);
        }
        finally
        {
            System.out.println(“terima kasih telah menjalankan program”);
        }
    }
}

Output Program :
ada kesalahan yang muncul
terima kasih telah menjalankan program

Perhatikan kedua contoh diatas, block finally akan selalu dieksekusi meskipun adanya kesalahan atau tidak pada block try. Berbeda dengan keyword catch keyword finally hanya dapat diletakan 1 kali setelah keyword try.


4. THROW
Keyword ini digunakan untuk melemparkan suatu bug yang dibuat secara manual. Contoh program :

public class A
{
    public static void main(String[] args) {
        try
        {
            throw new Exception("kesalahan terjadi");
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}

Output Program :
java.lang.Exception: kesalahan terjadi


Seperti yang anda lihat pada program diatas, pada keyword throw new Exception(“kesalahan terjadi”); akan melempar object bertipe exception yang merupakansubclass dari class Exception sehingga akan dianggap sebagai suatu kesalahan yang harus ditangkap oleh keyword catch.
Perhatikan contoh berikut ini :


public class A
{
    public static void main(String[] args) {
        try
        {
            throw new B(); //cobalah  ganti baris ini dengan à new B();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}
class B extends Exception
{
    B()
    {
    }
    public String toString()
    {
        return “object dengan tipe kelas B”;
    }
}

Output Program :
object dengan tipe kelas B

Program diatas telah mendefinisikan suatu kelas B mengextends dari kelas Exception. Ketika kita melakukan throw new B(); maka object dari kelas bertipe B ini akan dianggap kesalahan dan ditangkap oleh block catch. Sekarang jika anda menghilangkan keywordthrow apa yang terjadi?


5. THROWS
Keyword throws digunakan dalam suatu method atau kelas yang mungkin menghasilkan suatu kesalahan sehingga perlu ditangkap errornya. Cara mendefinisikannya dalam method adalah sebagai berikut : <method modifier> type method-name throws exception-list1, exceptio-list2, … {}.
Contoh Program :

public class A
{
    public static void main(String[] args) {
        try
        {
            f();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    public static void f() throws NullPointerException, ArrayIndexOutOfBoundsException
    {
        //implementasi method
        throw new NullPointerException();
        //throw new ArrayIndexOutOfBoundsException();
    }
}
Output Program :
java.lang.NullPointerException
Contoh program lainnya :
public class A
{
    public static void main(String[] args) {
        try
        {
            f();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    public static void f() throws NullPointerException, ArrayIndexOutOfBoundsException
    {
        //implementasi method
        //throw new NullPointerException();
        throw new ArrayIndexOutOfBoundsException();
    }
}

Output Program :
java.lang.ArrayIndexOutOfBoundsException
Perhatikan kedua contoh pengguaan keyword throws pada method. Ketika method tersebut dipanggil dalam block try. Maka method tersebut akan membuat object yang merupakansubclass dari class Throwable dan method tersebut akan melemparkan kesalahan yang ada dalam block method kedalam block try. Di dalam block try, kesalahan tersebut kemudian ditangkap kedalam block catch.



Rabu, 22 Februari 2017

browser event



BROWSER EVENT

                Untuk dapat menghasilkan dokumen HTML yang menarik, modifikasi elemen-elemen dalam dokumen saja tentu tidak cukup. Terkadang kita memerlukan dokumen yang interaktif; yang memberikan respon terhadap masukan dari pengguna. Terdapat banyak jenis masukan dari pengguna yang dapat diakses oleh browser. Penekanan tombol keyboard adalah masukan. Klik tombol mouse juga adalah masukan. Bahkan pergerakan mouse juga dapat dihitung sebagai masukan. Berbagai masukan dari pengguna ini dibaca dan dipantau oleh browser agar kita dapat mengambil tindakan ketika pengguna memberikan masukan. Karena masukan dianggap sebagai sesuatu yang dilakukan pengguna, atau dengan kata lain kejadian ketika dokumen HTML ditampilkan, maka hasil rekaman peristiwa ini dikenal dengan nama event.
                Cara kerja dari browser event sendiri sangat sederhana. Browser memberikan kita fasilitas untuk memantau kejadian tertentu pada elemen DOM tertentu. Kita kemudian dapat memberikan sebuah fungsi kepada browser, yang nantinya dipanggil ketika peristiwa yang dipantau terjadi. Untuk beberapa peristiwa, misalnya penekanan tombol keyboard seringkali kita akan memerlukan informasi tambahan seperti tombol apa yang ditekan pengguna. Untuk mengakomodasi hal ini browser memberikan objek khusus untuk event yang dapat kita akses melalui fungsi yang kita berikan ke pemantau kejadian.
                Perlu diketahui juga bahwa event dijalankan dari elemen yang paling dalam dari DOM, dan kemudian bergerak naik terus sampai ke elemen paling atas dari DOM (body). Misalkan kita memiliki elemen seperti berikut:
1
2
3
4
5
6
<p>Sebuah paragraf dengan list di dalamnya.
   <ul>
       <li>List pertama</li>
       <li><a href="http://google.com">List kedua</a></li>
    </ul>
</p>
                Jika pengguna melakukan klik pada teks “List kedua” pada elemen HTML di atas, maka browser terlebih dahulu akan menjalankan event yang ada pada elemen a. Jika kita tidak memantau elemen tersebut, maka browser akan mengecekevent pada elemen li, dan seterusnya sampai kepada elemen p dan akhirnya elemen teratas, body. Jika pada elemenbody juga tidak terdapat event yang dipantau, maka browser akan menjalankan fungsi standar browser. Dalam contoh di atas, browser akan bergerak ke alamat http://google.com. Pola pergerakan event seperti ini kita kenal dengan namaevent bubbilg atau bubbing phrase.
                Seperti yang dapat dilihat sejauh ini, event dalam DOM cukup sederhana dan mudah. Pada dasarnya, untuk menambahkan interaktifitas dalam dokumen HTML kita cukup melakukan dua langkah saja:
  1. Buat fungsi yang ingin dipanggil ketika event terjadi.
  2. Kaitkan elemen DOM dengan event yang diinginkan, beserta dengan fungsi yang dibuat pada langkah pertama.
Secara umum, browser menyediakan lima fasilitas khusus berkaitan dengan event, yaitu fasilitas untuk:
  1. Mendaftarkan pemantau event.
  2. Mengambil objek event.
  3. Mengambil informasi dari objek event.
  4. Memberikan informasi ke browser bahwa event telah selesai ditangani.
  5. Menghapus (melepaskan) pemantau event.
Kelima fasilitas yang ada ini sangat mudah digunakan, walaupun sayangnya beberapa browser mengimplementasikan semuanya dengan cara yang berbeda-beda. Seperti biasa, pembahasan akan kita lakukan hanya untuk browser berbasis Webkit dan Gecko.
Pemantauan Event
                Untuk melihat bagaimana kita dapat memantau event pada sebuah elemen DOM, kita akan bekerja dengan sebuah dokumen sederhana yang memiliki tulisan dan tombol, seperti berikut:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Event dalam Browser</title>
    </head>
    <body>
        <h1 id="judul">Judul Bab Dokumen</h1>
        <p>
        <a href="http://www.google.com" id="link">
            Link ke Google
        </a>
    </p>

        <input type="button"
           id="btnJudul"
           value="Ganti Warna Judul Bab">

        <input type="button"
           id="btnLink"
           value="Ganti Warna Link">

        <script type="text/javascript" src="script.js"></script>
    </body>
    </html>
Untuk mengaitkan pemantau event ke salah satu elemen, kita dapat memanggil method addEventListener milik elemen tersebut. addEventListener merupakan method milik objek yang mengimplementasikan antarmuka EventTarget.EventTarget sendiri diimplementasikan oleh seluruh elemen HTML dan beberapa objek khusus lainnya (misal:XMLHttpRequest). addEventListener menerima tiga buah argumen, yaitu:
  1. Argumen pertama merupakan string yang berisi teks dari nama event yang ingin dipantau.
  2. Argumen kedua menerima objek, atau tepatnya fungsi, yang ingin dijalankan ketika event terjadi.
  3. Argumen ketiga yaitu sebuah nilai boolean yang menandakan apakah bubbling phrase harus dijalankan dengan normal (dari dalam ke luar) atau sebaliknya (dari luar ke dalam). Nilai false berarti bubbling phrase berjalan normal, sementara true berarti bubbling phrase berjalan terbalik. Argumen ketiga ini bersifat opsional (tidak harus diisikan). Jika tidak diisikan bubbling phrase akan berjalan normal (nilai false).
Pada umumnya kita hanya akan menggunakan parameter pertama dan kedua, karena masih banyak browser yang tidak mengimplementasikan argumen ketiga. Langsung saja, misalkan jika kita ingin melakukan sesuatu ketika tombol “Ganti Warna Judul Bab” di-klik:
1
2
3
4
5
6
7
var tombol = document.getElementById("btnJudul");
var fungsi = function () {
    var jdl = document.getElementById("judul");
    jdl.style.color = "#5FF";
};

tombol.addEventListener("click", fungsi);
Kode di atas cukup jelas dan sederhana: ambil elemen yang tepat (tombol) dan kemudian kaitkan event klik ke fungsidengan addEventListener. Setelah menjalankan kode di atas, elemen h1 dengan id judulBab akan berubah warnanya ketika kita menekan tombol “Ganti Warna Judul Bab”.
Untuk menghilangkan atau membuang pemantau event sendiri dapat dilakukan dengan mudah, memanfaatkan fungsiremoveEventListener milik elemen yang bersangkutan. Fungsi ini memiliki parameter yang sama persis denganaddEventListener.
1
tombol.removeEventListener("click", fungsi);
Perhatikan juga bagaimana kita tetap mengirimkan fungsi ke removeEventListener. Hal ini berarti kita harus memiliki akses terhadap fungsi dan tombol ketika memanggil removeEventListener.
Objek Event
Objek Event merupakan sebuah objek yang dibuat ketika sebuah event berjalan. Objek Event dapat kita akses melalui fungsi yang kita kirimkan ke addEventListener:
1
2
3
4
5
6
var aksesEvent = function (evt) {
    // parameter evt merupakan objek Event
};

// fungsi aksesEvent akan dapat mengakses objek event
tombol.addEventListener("click", fungsi);
Pada kode di atas, kita hanya cukup menambahkan sebuah parameter ke dalam fungsi yang akan dikirimkan untuk dapat mengakses Event. Melalui objek ini kita dapat mengakses berbagai informasi mengenai event yang sedang berjalan. Misalnya, kita bisa mendapatkan elemen yang sedang berinteraksi dengan pengguna melalui properti target:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
var link = document.getElementById("link");
    var fungsiLink = function (event) {
            // karena pengguna melakukan klik terhadap
            // elemen dengan id link, maka kita bisa
            // mengambil elemen tersebut melalui Event.target
        var el = event.target;

        el.style.color = "#F43";
        el.style.textDecoration = "none";
    };

    // ketika di-klik, link akan berubah warna dan
    // tidak lagi bergaris bawah
    link.addEventListener("click", fungsiLink);
Sayangnya ketika kode penanganan event di atas berjalan kita tidak akan dapat melihat perubahan warna dan tampilan teks karena secara otomatis browser akan berpindah halaman ke Google. Untuk menangani hal ini, kita bisa memanggilmethod preventDefault yang berguna untuk membatalkan aksi standar (default) dari elemen DOM:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var link = document.getElementById("link");
    var fungsiLink = function (event) {
        var el = event.target;
        el.style.color = "#F43";
        el.style.textDecoration = "none";

        // memaksa elemen link tidak membuat
        // browser berpindah ke halaman lain
        event.preventDefault();
    };

    link.addEventListener("click", fungsiLink);
Sekarang kita bisa melihat bagaimana objek Event memiliki properti dan method yang sangat berguna, beserta cara menggunakan fitur-fitur tersebut. Keseluruhan method dan properti yang dimiliki objek Event tidak akan kita bahas di sini. Silahkan baca dokumentasi objek Event pada website yang relevan jika ingin melihat informasi apa saja yang disediakan oleh Event.
Membuat Event Sendiri
Jika memang diperlukan, kita juga dapat membuat event milik kita sendiri. Objek CustomEvent digunakan untuk membuatevent yang kita inginkan. CustomEvent dapat dibuat dengan memanggil constructor objek, seperti berikut:
1
2
3
4
5
var eventBuatan = new CustomEvent("eventBuatan", {
        detail: { name: "Event Buatan" },
        bubbles: true,
        cancelable: true
    });
Seperti yang dapat dilihat dari kode di atas, CustomEvent menerima dua buah parameter untuk constructor-nya, yaitu:
  1. Nama event yang kita inginkan, dalam contoh ini eventBuatan.
  2. Data yang ingin kita berikan kepada event buatan.
Terdapat tiga data utama yang dapat kita berikan, yaitu:
  1. bubbles, nilai boolean yang menentukan apakah event akan menjalankan bubble phrase atau tidak.
  2. cancelable, nilai boolean untuk memberikan fitur pembatalan event melalui method preventDefault danstopPropagation milik objek Event.
  3. detail, yang merupakan sebuah objek berisi data apapun yang ingin kita berikan kepada event.
Untuk menggunakan event buatan, kita dapat mengaitkan event tersebut kepada sebuah elemen DOM, seperti layaknyaevent bawaan dari browser:
1
2
3
link.addEventListener("eventBuatan", function (event) {
    // lakukan sesuatu ketika eventBuatan terjadi
});
Sayangnya, berbeda dengan event bawaan browserevent buatan kita tidak akan dapat berjalan secara otomatis ketika pengguna melakukan sesuatu dalam dokumen. Untuk event buatan, kita harus memanggil method dispatchEvent ketika ingin menjalankan event tersebut. dispatchEvent sendiri merupakan method milik elemen DOM, sehingga penggunaannya memerlukan keberadaan elemen DOM yang bersangkutan:
1
link.dispatchEvent(eventBuatan);
Karena keterbatasan inilah maka dalam penggunaan di aplikasi biasanya kita menggabungkan event buatan dengan interaksi antar satu objek dengan objek lain, bukan interaksi antara pengguna dengan dokumen HTML.
Keindahan Model Event Browser
Model event yang disediakan oleh DOM sangat sederhana. Tidak hanya sederhana, model yang diberikan oleh DOM juga sangat berguna. Dengan menggunakan model event milik DOM, kita mendapatkan akses terhadap aksi pengguna dari berbagai perangkat, mulai dari PC sampai dengan smartphoneEvent memungkinkan kita untuk mengakses apa yang terjadi, kapan sebuah event terjadi, dan kemudian menentukan respon kita terhadap event tersebut dengan sangat mudah. Bagaimana browser mengimplementasikan event tidak terlalu penting - kita dapat dengan tenang mengahlikan fokus kita ke pengembangan aplikasi web yang baik.
Abstraksi yang disediakan oleh event seperti ini sangat patut ditiru. Jika mampu membangun aplikasi dengan mengimplementasikan konsep-konsep yang ada dalam event, kita akan mendapatkan kode aplikasi yang sangat rapi dan mudah dirawat. Framework modern Javascript seperti Backbone.js dan AngularJS banyak menggunakan konsep-konsep sejenis. Jika tertarik dengan konsep yang digunakan oleh model event seperti ini, silahkan baca lebih lanjut mengenai pola pengembangan (design pattern) Observer.

kursor

Swimming Sperm