Ringkasan poin utama
- Checked exception di Java adalah fitur yang banyak dikritik di komunitas, tetapi memiliki keunggulan besar dari sisi keamanan tipe.
- Secara konsep, fitur ini menyediakan mekanisme keamanan tipe yang mirip dengan
Result<T, E> di Rust atau Either a b di Haskell.
- Checked exception secara eksplisit menyatakan kemungkinan kegagalan dalam signature method, sehingga penanganan error dipaksa melalui sistem tipe.
Keunggulan checked exception
- Memberikan keamanan tipe dengan memeriksa apakah exception ditangani pada saat kompilasi.
- Menjadikan kemungkinan exception sebagai bagian dari kontrak API dengan menyatakannya secara eksplisit melalui klausa
throws pada signature method.
- Menyediakan mekanisme praktis di mana exception otomatis diteruskan hanya dengan deklarasi.
- Tidak seperti Rust, tidak memerlukan sintaks tambahan seperti operator
? di setiap pemanggilan.
Masalah checked exception
- Menimbulkan kode boilerplate yang berlebihan dalam call chain.
- Kurang kompatibel dengan pemrograman fungsional seperti lambda dan Stream API yang diperkenalkan sejak Java 8.
- Sulit mengembangkan API karena penambahan exception baru ke interface dapat merusak kompatibilitas.
- Dapat mendorong anti-pola berupa pengabaian exception.
Usulan perbaikan
- Memperbaiki functional interface agar lambda dapat mendeklarasikan checked exception.
- Menambahkan dukungan tipe exception generik pada klausa
throws.
- Memperluas API agar checked exception dapat ditangani lebih baik dalam konteks fungsional.
- Integrasi yang lebih baik dengan API
Optional<T> dan Stream<T>.
Perbandingan dengan bahasa lain
- Rust: menyediakan mekanisme penanganan error eksplisit melalui
Result<T, E> dan operator ?.
- Kotlin: menjadikan semua exception sebagai unchecked, tetapi menyediakan struktur fungsional seperti
runCatching.
- Scala: mendukung penanganan error fungsional melalui tipe monadik seperti
Try[T] dan Either[A, B].
Kesimpulan
- Checked exception adalah fitur inovatif Java yang sering disalahpahami dan perlu dievaluasi kembali.
- Daripada ditinggalkan sepenuhnya, lebih baik fitur ini diperbaiki agar selaras dengan fitur Java modern.
- Ada peluang untuk berkembang ke arah penyelesaian masalah praktis sambil mempertahankan paradigma yang ada.
- Penting untuk menemukan titik keseimbangan antara keamanan tipe, keringkasan kode, dan fleksibilitas.
1 komentar
Rasanya seperti mengulang perdebatan yang sudah dibicarakan selama belasan tahun. Ini terdengar seperti argumen bahwa
Exceptionpunya nilai setara denganType, dan saya ingin mencoba menjawab bahwaTypesaja sudah cukup.