Java’nın checked exception’larına yeniden bakış: küçümsenen bir tür güvenliği özelliği
(hackers.pub)Başlıca noktaların özeti
- Java’nın checked exception’ları, toplulukta yaygın biçimde eleştirilen bir özellik olmasına rağmen tür güvenliği açısından güçlü avantajlar sunuyor.
- Kavramsal olarak Rust’ın
Result<T, E>veya Haskell’inEither a byapısına benzer bir tür güvenliği mekanizması sağlıyor. - Checked exception’lar, metot imzasında olası başarısızlık ihtimalini açıkça ifade ederek tür sistemi üzerinden hata işlemenin zorunlu olmasını sağlıyor.
Checked exception’ların avantajları
- Derleme zamanında exception işlenip işlenmediğini denetleyerek tür güvenliği sağlıyor.
- Metot imzasında
throwsbölümüyle exception olasılığını belirterek bunu API sözleşmesinin bir parçası haline getiriyor. - Yalnızca bildirimle exception’ın otomatik olarak yukarı taşınmasını sağlayan kullanışlı bir mekanizma sunuyor.
- Rust’tan farklı olarak her çağrıda
?operatörü gibi ek sözdizimi gerektirmiyor.
Checked exception’ların sorunları
- Çağrı zincirinde aşırı boilerplate kod oluşmasına yol açıyor.
- Java 8 sonrasında gelen lambda ve Stream API gibi işlevsel programlama özellikleriyle uyumluluğu zayıf.
- Bir interface’e yeni exception eklenmesi, uyumluluğu bozduğu için API’nin evrimini zorlaştırıyor.
- Exception’ı görmezden gelme anti-pattern’lerini teşvik etme riski taşıyor.
İyileştirme önerileri
- Lambda’ların checked exception bildirebilmesi için functional interface’lerin geliştirilmesi.
throwsbölümüne generic exception türü desteği eklenmesi.- İşlevsel bağlamlarda checked exception’ların daha iyi ele alınabilmesi için API’nin genişletilmesi.
Optional<T>veStream<T>API’leriyle daha iyi entegrasyon sağlanması.
Diğer dillerle karşılaştırma
- Rust:
Result<T, E>ve?operatörü üzerinden açık hata işleme mekanizması sunuyor. - Kotlin: Tüm exception’ları unchecked hale getirdi, ancak
runCatchinggibi işlevsel yapılar sunuyor. - Scala:
Try[T],Either[A, B]gibi monadik türler üzerinden işlevsel hata işlemeyi destekliyor.
Sonuç
- Checked exception’lar, Java’nın yanlış anlaşılan yenilikçi bir özelliği olarak yeniden değerlendirmeyi hak ediyor.
- Tamamen vazgeçmek yerine, modern Java özellikleriyle daha uyumlu olacak şekilde iyileştirilmesi daha doğru olur.
- Mevcut paradigmayı korurken pratik sorunları çözecek yönde gelişme potansiyeli bulunuyor.
- Tür güvenliği, kod sadeliği ve esneklik arasında denge kurmak önemli.
1 yorum
Sanki onlarca yıldır konuşulan tartışmayı tekrar ediyormuşuz gibi hissettim. Bu, Exception'ın da Type kadar değerli olduğu iddiası gibi geliyor; ben ise Type'ın yeterli olduğunu söylemek istiyorum.