DEV Community

alfianandinugraha
alfianandinugraha

Posted on

Apa itu try, on, catch, dan finally di Dart ?

Hallowww semua, di artikel ini saya coba membahas mengenai Exception Handling di bahasa Dart.

Apa itu Exception Handling ? ini merupakan cara komputer untuk mengelola error. Jadi saat bikin program itu tidak semuanya akan berjalan mulus, nanti pasti ada error yang harus kita kelola.

Pada kondisi apa terjadi error ? Umumnya exception handling digunakan saat:

  • Tipe data tidak sesuai
  • Method / property tidak ditemukan
  • Error saat membaca file / IO
  • Kesalahan jaringan saat melakukan request / response
  • (...tambahkan dikolom komentar yaa hehe)

Di Dart sendiri sudah disediakan fitur exception handling, dan caranya pun mirip seperti bahasa pemrograman lainnya. Konsep utama dari exception handling adalah try-catch.

try-catch

try merupakan tahapan awal untuk menjalankan exception handling. Sedangkan catch digunakan untuk menerima errornya.

Contoh programnya :

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name.length); // Awww error !
  print("Finish !"); // Kode tidak dijalankan
} catch (err) {
  print("Terjadi kesalahan");
}
Enter fullscreen mode Exit fullscreen mode

Program diatas akan mengeluarkan error karena property length itu tidak ada di variable name.

Jadi cara kerjanya adalah pertama kode blok yang ada di dalam try akan dijalankan terlebih dahulu. Ketika terjadi error maka akan langsung lompat ke blok catch.

Output:
try-catch exception

Kode program print("Finish !"); tidak dijalankan.

on

Dari bahasa yang saya pelajari sepertinya, Dart ini membuat konsep baru pada Exception Handling, karena pada umumnya yang tersedia hanyalah try, catch, dan finally tapi di Dart ini ada on.

Jadi apa itu on pada Dart ? on digunakan untuk mengelola error berdasarkan jenis errornya. Di kode sebelumnya kita hanya menggunakan try-catch saja yang dimana semua error akan masuk ke dalam catch.

Kode program diatas kita jalankan ulang tapi dengan print yang berbeda:

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name.length); // Awww error !
  print("Finish !"); // Kode tidak dijalankan
} catch (err) {
  print("Terjadi kesalahan");
  print(err.toString()); // Kode program baru
}
Enter fullscreen mode Exit fullscreen mode

Outputnya adalah:
Output error

Dari gambar diatas kita melihat ada error dengan jenis NoSuchMethodError. Dari dokumentasinya, dituliskan:

...corresponding to a failed method call

Artinya error NoSuchMethodError adalah jenis error yang digunakan ketika method pada variabel tidak ada. Ini terjadi akibat property / method length tidak ada di variabel name.

Terus dimana on nya ?

Nahh disini kita bisa menerapkan keyword on. Maka programnya menjadi:

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name.length); // Awww error !
  print("Finish !"); // Kode tidak dijalankan
} on NoSuchMethodError {
  // Kode program yang dialam `on` ini yang akan dijalankan
  print("Method tidak ditemukan");
} catch (err) {
  // Tidak dijalankan
  print("Terjadi kesalahan");
  print(err.toString());
}
Enter fullscreen mode Exit fullscreen mode

Output:
Error handling dengan on

Sekarang yang keluar adalah Method tidak ditemukan bukan Terjadi kesalahan. Kok iso ? itu karena jenis error nya adalah NoSuchMethodError jadi kode program yang ada didalam on NoSuchMethodError itulah yang akan dijalankan.

finally

finally akan dijalankan ketika semua proses selesai, baik itu ada error atau tidak.

Contoh program ketika ada error:

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name.length); // Awww error !
  print("Finish !"); // Kode tidak dijalankan
} catch (err) {
  print("Terjadi kesalahan");
} finally {
  print("Proses try-catch selesai");
}
Enter fullscreen mode Exit fullscreen mode

Output program:
finally saat ada error

Contoh kode program ketika tidak ada error:

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name);
  print("Finish !"); // Berjalan
} catch (err) {
  print("Terjadi kesalahan");
} finally {
  print("Proses try-catch selesai");
}
Enter fullscreen mode Exit fullscreen mode

Output program:
finally ketika tidak ada error

Wait, kenapa harus pakai finally ?

Bukankah sama aja ketika kita tidak menggunakan finally ?
Penasaran

Okee kita coba kalau tanpa finally yaa. Jadi programnya:

try {
  // Kode disini akan berjalan pertama kali
  print("Proses...");
  dynamic name = 20;
  print(name.length); // Awww error !
  print("Finish !"); // Kode tidak dijalankan
} catch (err) {
  print("Terjadi kesalahan");
}

print("Proses try-catch selesai");
Enter fullscreen mode Exit fullscreen mode

Output program:
tanpa finally

Ehhh, iyaa juga yaaa...
hehehehe

Eitss, finally ini biasanya digunakan untuk membuat program kita lebih konsisten. Umumnya digunakan ketika:

  • Selesai terhubung ke database
  • Membersihkan memori

Sumber https://stackoverflow.com/a/16705037/9905881

Okee deh mungkin itu saja, untuk pembahasan mengenai error / exception handling di bahasa Dart. Kalau kalian memiliki saran / kritikan silahkan komentar yaa 😉

Terima kasih sudah membaca ~

Top comments (2)

Collapse
 
rafitrhmn profile image
rafitrhmn

bang klo kasus nya kek gini gimana:

  • misalkan sy buat coding input harus dengan interger gak boleh string. var a = int.parse(stdin.readLineSync()!);
  • lalu ketika pengguna menginputkan string. muncul catch error dan pengguna disuruh inputkan lagi. kek mana tuh bang?.
Collapse
 
alfianandinugraha profile image
alfianandinugraha

bisa manfaatin while itu, saya sering dapet tugas kuliah kyak gitu

Simplenya sih gini:

  1. bikin variable success yang bertipe boolen
  2. Buat while dengan kondisi success !== true atau !success
  3. Dalam while buat try-catch nanti di try set variabel success ke true
  4. Di catch nya set variable success ke false

Nanti otomatis while nya bakalan jalan terus sampe success nya ngga false