Seringkali ketika saya menulis suatu fungsi saya ingin memastikan input ke dalamnya valid untuk mendeteksi kesalahan sedini mungkin (saya percaya ini disebut prasyarat). Ketika sebuah prasyarat gagal, saya selalu melemparkan pengecualian. Tetapi saya mulai ragu apakah ini praktik terbaik dan jika tidak, pernyataan akan lebih tepat.
Jadi kapan saya harus melakukan yang: kapan tepat untuk menggunakan pernyataan dan kapan tepat untuk melemparkan pengecualian?
exceptions
assertions
Gablin
sumber
sumber
Jawaban:
Pernyataan hanya boleh digunakan untuk memverifikasi kondisi yang secara logis tidak mungkin salah (baca: cek kewarasan). Ketentuan ini seharusnya hanya didasarkan pada input yang dihasilkan oleh kode Anda sendiri. Setiap pemeriksaan berdasarkan input eksternal harus menggunakan pengecualian.
Aturan sederhana yang cenderung saya ikuti adalah memverifikasi argumen fungsi pribadi dengan menegaskan, dan menggunakan pengecualian untuk argumen fungsi publik / yang dilindungi.
sumber
Penegasan digunakan untuk menemukan kesalahan pemrograman. Program Anda harus bekerja dengan baik ketika semua pernyataan dihapus.
Pengecualian, di sisi lain, adalah untuk situasi yang dapat terjadi bahkan ketika programnya sempurna; mereka disebabkan oleh pengaruh eksternal, seperti perangkat keras, jaringan, pengguna dll.
sumber
Praktik pemrograman tipikal adalah mengumpulkan pernyataan dari produksi / rilis build. Asersi hanya akan membantu selama pengujian internal untuk menangkap kegagalan asumsi. Anda seharusnya tidak menganggap perilaku agen eksternal, jadi Anda tidak boleh menegaskan tentang peristiwa dari jaringan atau pengguna. Juga merupakan praktik yang baik untuk menulis kode penanganan untuk produksi jika seandainya pernyataan gagal.
Misalnya dalam C,
Pengecualian dimaksudkan untuk dibangun di dalam bangunan produksi. Alternatif pengecualian adalah kesalahan pengembalian dan bukan asersi.
sumber
Satu masalah dengan menegaskan bagi saya adalah bahwa mereka dinonaktifkan secara default di Jawa.
Kami menggunakan strategi gagal-pertama di mana program - yang mungkin telah berjalan tanpa pengawasan selama bertahun-tahun - harus macet sedini mungkin untuk menghindari korupsi data jika terjadi data yang buruk (pada formulir yang tidak terduga). Inilah yang kami gunakan untuk pemeriksaan, dan dengan menggunakan penegasan, kami pada dasarnya mengambil risiko mereka tidak aktif.
sumber