Pada tahun-tahun saya habiskan untuk pemrograman dan pengembangan sistem, hanya ada dua situasi di mana saya menemukan pola tersebut berguna (dalam kedua kasus supresi terkandung juga pencatatan pengecualian yang dilemparkan, saya tidak menganggap tangkapan biasa dan null
kembali sebagai praktik yang baik. ).
Dua situasi adalah sebagai berikut:
1. Saat pengecualian tidak dianggap sebagai kondisi luar biasa
Ini adalah ketika Anda melakukan operasi pada beberapa data, yang mungkin melempar, Anda tahu itu mungkin melempar tetapi Anda masih ingin aplikasi Anda tetap berjalan, karena Anda tidak memerlukan data yang diproses. Jika Anda menerimanya, itu baik, jika tidak, itu juga baik.
Beberapa atribut opsional suatu kelas mungkin muncul dalam pikiran.
2. Saat Anda menyediakan implementasi perpustakaan yang baru (lebih baik, lebih cepat?) Menggunakan antarmuka yang sudah digunakan dalam suatu aplikasi
Bayangkan Anda memiliki aplikasi menggunakan semacam perpustakaan lama, yang tidak membuang pengecualian tetapi kembali null
karena kesalahan. Jadi, Anda membuat adaptor untuk pustaka ini, cukup banyak menyalin API asli pustaka, dan menggunakan antarmuka baru (masih non-melempar) dalam aplikasi Anda dan menanganinull
pemeriksaan sendiri.
Versi baru pustaka hadir, atau mungkin pustaka yang sama sekali berbeda menawarkan fungsi yang sama, yang alih-alih kembali null
, melempar pengecualian dan Anda ingin menggunakannya.
Anda tidak ingin membocorkan pengecualian ke aplikasi utama Anda, jadi Anda menekan dan mencatatnya di adaptor yang Anda buat untuk membungkus ketergantungan baru ini.
Kasus pertama bukan masalah, itu adalah perilaku kode yang diinginkan. Namun, dalam situasi kedua, jika di mana-mana nilai null
kembali adaptor perpustakaan benar-benar berarti kesalahan, refactoring API untuk melempar pengecualian dan menangkapnya alih-alih mengecek null
mungkin (dan biasanya kode-bijaksana) ide yang bagus.
Saya pribadi menggunakan pengecualian supresi hanya untuk kasus pertama. Saya hanya menggunakannya untuk kasus kedua, ketika kami tidak memiliki anggaran untuk membuat sisa aplikasi berfungsi dengan pengecualian, bukan null
s.