Konsep Bahasa Pemograman-BAB 11- Exception and Event Handling

BAB 11

Exception Handling and Event Handling

1.Pengenalan dan Cara Kerja Exception Handling

Banyak sistem perangkat keras komputer yang mampu mendeteksi run-time eror tertentu.Setelah mampu mendeteksinya,program akan menyediakan kemampuan untuk memperbaiki kesahalan dan menjalankannya.Namun,bahasa pemrograman yang pada awalnya dirancang dan dilaksanakan sedemikian rupa dimana program tidak bisa mendeteksi atau mencoba untuk menangani kesalahan(eror) tersebut. Dalam bahasa ini, terjadinya kesalahan tersebut hanya menyebabkan program yang akan dihentikan dan kontrol untuk ditransfer ke sistem operasi. Reaksi sistem operasi khas untuk kesalahan run-time adalah untuk menampilkan pesan diagnostik, yang mungkin berarti dan karena itu berguna, atau sangat samar. Setelah menampilkan pesan, program ini dihentikan.

Para perancang bahasa pemograman dari kebanyakan bahasa kontemporer telah mencantumkan mekanisme yang memungkinkan program untuk bereaksi dengan cara standar untuk kesalahan(eror) run-time tertentu, serta peristiwa yang tidak biasa program lain yang terdeteksi. Program juga diberitahu ketika peristiwa tertentu yang terdeteksi oleh perangkat keras atau sistem perangkat lunak, sehingga mereka juga dapat bereaksi terhadap peristiwa ini. Mekanisme ini secara kolektif disebut penanganan eksepsi (exception handling). Mungkin alasan yang paling masuk akal beberapa bahasa tidak termasuk penanganan eksepsi adalah kompleksitas itu menambah bahasa.

Pengecualian akan ada peristiwa yang tidak biasa pada suatu program, yang salah(eror) atau tidak terdeteksi oleh software atau hardware,yang membutuhkan proses khusus disebut sebagai eksepsi(Exception).Sedangkan,pengolahan(processing) khusus yang mungkin diperlukan saat pengecualian terdeteksi adalah disebut penanganan eksepsi(Exception Handling). Pengolahan ini dilakukan oleh unit kode atau segmen disebut handler pengecualian(Exception Handler).Eksepsi(exception) dimunculkan ketika peristiwa yang terkait terjadi.

Setelah exception handler mengeksekusi, baik kontrol dapat mentransfer ke suatu tempat dalam program luar kode handler atau eksekusi program hanya dapat mengakhiri. Kami memberi istilah ini pertanyaan kontrol kelanjutan setelah eksekusi handler, atau hanya kelanjutan. Penghentian jelas pilihan yang paling sederhana, dan yang terbaik dalam banyak kondisi kesalahan(eror) pengecualian. Namun, dalam situasi lain, terutama yang berhubungan dengan yang tidak biasa tapi peristiwa yang salah, pilihan melanjutkan eksekusi adalah yang terbaik. Desain ini disebut resumption.Dengan kemampuan Exception Handling,sebuah program memiliki keuntungan sebagai berikut :

 

  • Pendeteksian kesalahan kode sangat melelahkan untuk ditulis dan mengacaukan program
  • penanganan eksepsi mendorong programmer untuk mempertimbangkan banyak kemungkinan kesalahan yang berbeda
  • Pembentukan pengecualian memungkinkan penggunaan kembali tingkat tinggi kode exception handling

Exception handling control flow.

  1. Alternatif dari Exception Handling

Sebuah bahasa pemograman yang tidak memiliki kemampuan exception handling masih dapat  mendefinisikan,mendeteksi,mendapatkan dan menangani eksepsi(user defined,softwarer detected) yaitu dengan cara:

-Mengerimkan parameter pembantu atau menggunakan return value untuk mengindikasikan return stats dari sebuah subprogram.

-Mengirimkan label parameter untk semua subprogram (error return adalah untuk label yang dikirim)

-Mengirimkan sebuah exception handling subprogram kepada semua subprogram.

  1. Exception Handling pada Bahasa Pemograman PHP

Exception merupakan kondisi pengecualian pada program. Exception akan mengubah alur program ke mode normal jika terjadi error. Dengan kata lain, exception mengabaikan error yang terjadi dan mengerjakan proses tertentu saat exception tertangkap. Ketika exception terjadi karena dipicu oleh error, status kode program akan aman karena eksekusi program akan dialihkan ke kode program penanganan exception (exception handler). Jadi pada kondisi ini exception handler akan meresume eksekusi dari status kode yang tersimpan lalu menghentikan eksekusi script dan melanjutkannya dengan kode pada lokasi lain didalam program.
Berikut adalah kejadian yang terjadi ketika sebuah pengecualian/eksepsi dipicu:

  • Pernyataan yang menyatakan kondisi kode saat ini tersimpan
  • Eksekusi kode akan beralih ke fungsi handler pengecualian yang telah ditetapkan secara custom.
  • Tergantung pada situasi, handler dapat melanjutkan eksekusi dari kondisi kode yang disimpan, mengakhiri eksekusi script atau melanjutkan script dari lokasi yang berbeda dalam kode

Pada bahasa pemograman PHP,kita hanya dapat menemukan exception dan mengubah kode tersebut secara manual. Untuk menggunakan exception(pencarian exception) pada PHP dilakukan dengan metode-metode berikut :

  • Basic use of Exceptions

Ketika eksepsi dilemparkan, kode berikut tidak akan dieksekusi, dan PHP akan mencoba untuk menemukan pencocokan “menangkap” blok.Jika eksepsi tidak tertangkap, kesalahan fatal (fatal eror) akan dikeluarkan dengan pesan “Uncaught exception“.contoh seperti berikut :

<?php
//create function with an exception
function checkNum($number) {
if($number>1) {
throw new Exception(“Value must be 1 or below”);
}
return true;
}

//trigger exception
checkNum(2);
?>

Nantinya ,akan muncul pesan error yang mennjukkan exception seperti berikut :

Fatal error: Uncaught exception ‘Exception’
with message ‘Value must be 1 or below’ in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Untuk mencegah error seperti contoh diatas,kita perlu membentuk kode yang menangani eksepsi yaitu :

Try, throw and catch
Kode Pengecualian(exception) yang tepat harus mencakup:

  1. Try – Sebuah fungsi menggunakan pengecualian harus berada dalam “try” blok. Jika pengecualian tidak memicu, kode akan berlanjut seperti biasa. Namun jika pengecualian memicu, eksepsi “thrown”
  2. Throw – Ini adalah cara memicu pengecualian. Setiap “throw” harus memiliki setidaknya satu “catch”
  3. Catch – Sebuah “catch” blok mengambil pengecualian dan menciptakan sebuah objek yang berisi informasi pengecualian

Berikut contoh penggunaan try,throw,catch

<?php
//create function with an exception
function checkNum($number) {
if($number>1) {
throw new Exception(“Value must be 1 or below”);
}
return true;
}

//trigger exception in a “try” block
try {
checkNum(2);
//If the exception is thrown, this text will not be shown
echo ‘If you see this, the number is 1 or below’;
}

//catch exception
catch(Exception $e) {
echo ‘Message: ‘ .$e->getMessage();
}
?>

 

Hasil kode di atas akan menghasilkan pesan error seperti berikut :

Message: Value must be 1 or below

Penjelasan dari script kode di atas :

Pada kode diatas terlihat proses memunculkan exception (try), melemparkan (throw) dan menangkap exception (catch) dan menampilkan informasi exception. Program dimulai dengan membuat fungsi checkNum yang melemparkan exception jika angka yang dimasukkan lebih besar dari 1.

Selanjutnya exception dipicu dengan perintah try yang menjalankan fungsi checkNum(2). Exception yang dihasilkan oleh perintah try selanjutnya ditangkap oleh perintah catch yang kemudian menampilkan Pesan Error yang diset oleh perintah throw pada fungsi checkNum.

 

  • Creating a custom exception handler

Untuk membuat pengecualian custom handler(custom exception handler) maka harus dibuat kelas khusus dengan fungsi yang dapat dipanggil ketika pengecualian(exception) terjadi di PHP. Kelas harus menjadi perpanjangan dari kelas pengecualian.
Kelas pengecualian kustom (custom exception handler)  mewarisi(inherit) sifat dari kelas pengecualian PHP dan anda dapat menambahkan fungsi kustom untuk itu,seperti contoh berikut :

<?php
class customException extends Exception {
public function errorMessage() {
//error message
$errorMsg = ‘Error on line ‘.$this->getLine().’ in ‘.$this->getFile()
.’: <b>’.$this->getMessage().'</b> is not a valid E-Mail address’;
return $errorMsg;
}
}

$email = “someone@example…com”;

try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if email is not valid
throw new customException($email);
}
}

catch (customException $e) {
//display custom message
echo $e->errorMessage();
}
?>

Penjelasan script kode diatas:

Kelas baru adalah salinan dari kelas pengecualian sebelmnya dengan penambahan fungsi errorMessage ( ). Karena itu adalah salinan dari kelas sebelumnya, dan mewarisi properti dan metode dari kelas sebelumnya, kita dapat menggunakan metode kelas pengecualian seperti getline ( ) dan getFile ( ) dan getMessage ( ) .

Kode di atas melempar pengecualian dan menangkap dengan kelas pengecualian kustom :

 

  • The customException ( ) class dibuat sebagai perpanjangan dari kelas pengecualian sebelumnya . Dengan cara ini mewarisi semua metode dan properti dari kelas pengecualian sebelumnya
  • The fungsi errorMessage ( ) Fungsi ini mengembalikan pesan kesalahan jika alamat e -mail tidak valid
  • Variabel email $ diatur ke string yang bukan alamat e – mail yang valid
  • The ” try ” blok dijalankan dan eksepsi dilemparkan karena alamat e -mail tidak valid
  • The ” catch” blok menangkap pengecualian dan menampilkan pesan kesalahan

 

 

  • Multiple exceptions

Hal ini dimungkinkan script untuk menggunakan beberapa pengecualian untuk memeriksa beberapa kondisi. Hal ini dimungkinkan untuk menggunakan beberapa blok if..else, switch, atau nest beberapa pengecualian(multiple exception).
Pengecualian ini dapat menggunakan kelas eksepsi yang berbeda dan kembali pesan kesalahan yang berbeda:

<?php
class customException extends Exception {
public function errorMessage() {
//error message
$errorMsg = ‘Error on line ‘.$this->getLine().’ in ‘.$this->getFile()
.’: <b>’.$this->getMessage().'</b> is not a valid E-Mail address’;
return $errorMsg;
}
}

$email = “someone@example.com”;

try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//throw exception if email is not valid
throw new customException($email);
}
//check for “example” in mail address
if(strpos($email, “example”) !== FALSE) {
throw new Exception(“$email is an example e-mail”);
}
}

catch (customException $e) {
echo $e->errorMessage();
}

catch(Exception $e) {
echo $e->getMessage();
}
?>

Penjelasan script kode diatas:

  1. The customException () class dibuat sebagai perpanjangan dari kelas pengecualian sebelumnya. Dengan cara ini mewarisi semua metode dan properti dari kelas pengecualian sebelumnya
  2. The fungsi errorMessage ()dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat e-mail tidak valid
  3. Variabel $ email diatur ke string yang merupakan alamat e-mail yang valid, tetapi berisi string “contoh”
  4. The “try” blok dijalankan dan pengecualian tidak dilempar pada kondisi pertama
  5. Kondisi kedua memicu pengecualian karena e-mail berisi string “example”
  6. The “catch” blok menangkap pengecualian dan menampilkan pesan kesalahan yang benar

 

Jika pengecualian dilemparkan adalah dari customException kelas dan tidak ada customException menangkap, hanya menangkap dasar pengecualian, pengecualian akan ditangani di sana.

  • Re-throwing an exception

Kadang-kadang, ketika eksepsi dilemparkan, kita mungkin ingin menanganinya berbeda dari cara standar. Hal ini dimungkinkan untuk melemparkan pengecualian untuk kedua kalinya dalam “catch” blok. Sebuah script harus menyembunyikan kesalahan sistem dari pengguna.Kesalahan sistem mungkin penting untuk sang pembuat kode, tetapi tidak menarik bagi pengguna.Untuk membuat lebih mudah bagi pengguna kita, dapat kembali melempar pengecualian dengan pesan user friendly:

<?php
class customException extends Exception {
public function errorMessage() {
//error message
$errorMsg = $this->getMessage().’ is not a valid E-Mail address.’;
return $errorMsg;
}
}

$email = “someone@example.com”;

try {
try {
//check for “example” in mail address
if(strpos($email, “example”) !== FALSE) {
//throw exception if email is not valid
throw new Exception($email);
}
}
catch(Exception $e) {
//re-throw exception
throw new customException($email);
}
}

catch (customException $e) {
//display custom message
echo $e->errorMessage();
}
?>

 

 

Penjelasan script kode diatas:

Kode di atas tes jika email-address berisi string “contoh” di dalamnya, jika tidak, pengecualian tersebut kembali dilemparkan:

  1. The customException () class dibuat sebagai perpanjangan dari kelas pengecualian sebelumnya. Dengan cara ini mewarisi semua metode dan properti dari kelas pengecualian sebelumnya.
  2. The fungsi errorMessage ()dibuat. Fungsi ini mengembalikan pesan kesalahan jika alamat e-mail tidak valid
  3. Variabel $ email diatur ke string yang merupakan alamat e-mail yang valid, tetapi berisi string “example”
  4. The “try” blok berisi “try” blok lain untuk membuatnya mungkin untuk kembali membuang-pengecualian
  5. Pengecualian dipicu karena e-mail berisi string “example”
  6. The “catch” blok menangkap pengecualian dan re-melempar “customException”
  7. The “customException” tertangkap dan menampilkan pesan kesalahan

 

Jika pengecualian tidak tertangkap dalam arus “try” blok, ia akan mencari blok catch pada “higher levels”.

  • Setting a top level exception handler

The fungsi set_exception_handler ()menetapkan fungsi yang ditetapkan pengguna untuk menangani semua pengecualian tertangkap.Dengan contoh seperti berikut :

<?php
function myException($exception)
{
echo “<b>Exception:</b> ” , $exception->getMessage();
}

set_exception_handler(‘myException’);

throw new Exception(‘Uncaught Exception occurred’);
?>

Output dari kode di atas harus sesuatu seperti ini:

pengecualian: Uncaught Exception occurred

Dalam kode di atas tidak ada blok “catch”. Sebaliknya, handler pengecualian tingkat atas dipicu. Fungsi ini harus digunakan untuk menangkap pengecualian tidak tertangkap.
Aturan untuk pengecualian

  • Kode dapat dikelilingi dalam blok try, untuk membantu menangkap pengecualian potensial
  • Masing-masing mencoba blok atau “membuang” harus memiliki minimal satu sesuai blok catch
  • Beberapa blok catch dapat digunakan untuk menangkap kelas yang berbeda dari pengecualian
  • Pengecualian dapat dibuang (atau re-dilemparkan) dalam blok catch dalam blok try

Sebuah aturan sederhana: Jika Anda melemparkan sesuatu, Anda harus menangkapnya.

4.Pengenalan Event Handling

Sebuah acara(event) adalah pemberitahuan bahwa sesuatu yang spesifik telah terjadi, seperti klik mouse pada tombol grafis. Sebenarnya, acara adalah obyek yang secara implisit diciptakan oleh sistem run-time dalam menanggapi tindakan pengguna, setidaknya dalam konteks di mana penanganan event(event handling).

Event handler adalah segmen kode yang dieksekusi dalam menanggapi penampilan sebuah acara(event). Event handler memungkinkan program untuk menjadi responsif terhadap tindakan pengguna

 

Oleh Kelompok 12

Referensi :

Bab 11 :

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *