Menurut pendapat saya, pengecualian adalah alat penting untuk mendeteksi kesalahan kode pada saat dijalankan. Baik dalam pengujian dan dalam produksi. Buat pesan mereka cukup jelas sehingga dikombinasikan dengan jejak tumpukan Anda dapat mengetahui apa yang terjadi dari log.
Pengecualian sebagian besar merupakan alat pengembangan dan cara untuk mendapatkan laporan kesalahan yang wajar dari produksi dalam kasus yang tidak terduga.
Terlepas dari pemisahan kekhawatiran (jalan bahagia dengan hanya kesalahan yang diharapkan vs. jatuh hingga mencapai beberapa penangan generik untuk kesalahan tak terduga) menjadi hal yang baik, membuat kode Anda lebih mudah dibaca dan dipelihara, sebenarnya tidak mungkin untuk menyiapkan kode Anda untuk semua kemungkinan kasus yang tak terduga, bahkan dengan membengkaknya dengan kode penanganan kesalahan untuk menyelesaikan pembacaan tidak terbaca.
Itu sebenarnya arti dari "tak terduga".
Btw., Apa yang diharapkan dan apa yang tidak adalah keputusan yang hanya dapat dibuat di situs panggilan. Itulah sebabnya pengecualian yang diperiksa di Jawa tidak berhasil - keputusan dibuat pada saat mengembangkan API, ketika sama sekali tidak jelas apa yang diharapkan atau tidak terduga.
Contoh sederhana: API peta hash dapat memiliki dua metode:
Value get(Key)
dan
Option<Value> getOption(key)
yang pertama melempar pengecualian jika tidak ditemukan, yang terakhir memberi Anda nilai opsional. Dalam beberapa kasus, yang terakhir lebih masuk akal, tetapi dalam kasus lain, kode Anda sinmply harus mengharapkan ada nilai untuk kunci yang diberikan, jadi jika tidak ada, itu adalah kesalahan yang tidak dapat diperbaiki oleh kode ini karena dasar asumsi telah gagal. Dalam hal ini sebenarnya perilaku yang diinginkan untuk keluar dari jalur kode dan turun ke beberapa penangan generik jika panggilan gagal.
Kode seharusnya tidak mencoba menangani asumsi dasar yang gagal.
Kecuali dengan memeriksa mereka dan melemparkan pengecualian yang bisa dibaca dengan baik, tentu saja.
Mengecualikan pengecualian bukanlah kejahatan tetapi menangkapnya mungkin. Jangan mencoba memperbaiki kesalahan yang tidak terduga. Tangkap pengecualian di beberapa tempat di mana Anda ingin melanjutkan loop atau operasi, catat, mungkin melaporkan kesalahan yang tidak diketahui, dan hanya itu.
Menangkap balok di semua tempat adalah ide yang sangat buruk.
Rancang API Anda dengan cara yang memudahkan Anda mengekspresikan niat Anda, yaitu menyatakan apakah Anda mengharapkan kasus tertentu, seperti kunci tidak ditemukan, atau tidak. Pengguna API Anda kemudian dapat memilih panggilan lempar untuk kasus yang benar-benar tidak terduga.
Saya kira alasan orang membenci pengecualian dan melangkah terlalu jauh dengan menghilangkan alat penting ini untuk otomatisasi penanganan kesalahan dan pemisahan kekhawatiran yang lebih baik dari bahasa baru adalah pengalaman buruk.
Itu, dan beberapa kesalahpahaman tentang apa yang sebenarnya baik untuk mereka.
Mensimulasi mereka dengan melakukan SEMUANYA melalui pengikatan monadik membuat kode Anda kurang mudah dibaca dan dikelola, dan Anda berakhir tanpa jejak tumpukan, yang membuat pendekatan ini CURAH.
Penanganan kesalahan gaya fungsional sangat bagus untuk kasus kesalahan yang diharapkan.
Biarkan penanganan pengecualian secara otomatis menangani yang lainnya, itulah gunanya :)
panic
yang tidak persis sama. Selain apa yang dikatakan di sana, pengecualian tidak lebih dari cara yang canggih (tapi nyaman) untuk melakukanGOTO
, meskipun tidak ada yang menyebutnya seperti itu, untuk alasan yang jelas.