Kotlin, exception handling'i Java'ya benzer bir şekilde uygular, ancak önemli farklılıklar vardır. Kotlin'de try, catch ve finally gibi tanıdık yapılar kullanılır, ancak temel fark Kotlin'de checked exceptions yoktur. Bu, tüm istisnaların (çalışma zamanı hataları) unchecked olduğu anlamına gelir - bunları fonksiyon imzasında bildirmeniz ve açıkça yakalamanız gerekmez.
finally bloğu, istisna fırlatılmış olsa bile her zaman çalışır.try bloğunun "return value" desteklemesine sahiptir; yani try bir ifade olarak kullanılabilir ve sonuç döndürebilir.try/catch kullanmaktan kaçınmak önerilir - yalnızca gerçekten olağanüstü durumlar için kullanın.fun parseIntOrNull(str: String): Int? = try { str.toInt() } catch (e: NumberFormatException) { null }
use ile kaynak yönetimi kullanarak otomatik kapatma yapın (örneğin, dosyalar için).Kotlin'de bir fonksiyonun hangi istisnaları fırlattığını imzaya eklemek gerekir mi (Java'daki gibi - throws aracılığıyla)?
Doğru cevap: Hayır, Kotlin'de checked exceptions mekanizması yoktur. Tüm istisnalar unchecked'dır. Fonksiyon imzasında throws sözdizimi yoktur (İstisna, Java uyumluluğu için yalnızca interop için @Throws anotasyonu vardır).
Hikaye
Bir projede, checked exceptions (örneğin,
IOException) kullanan Java kodu taşındı. Kotlin'e geçişten sonra, geliştirici dosyalarla çalışırken istisnayı işlemeyi unuttu - uygulama gerçek dosyalar üzerinde çökmeye başladı, çünkü kimse IO hatalarını ele almadı, derleyicinin Java'daki gibi uyaracağını düşündü.
Hikaye
Takımdan bir üye, akış kontrolü için try/catch kullanarak günlük parselama işlemini yavaşlattı (her geçersiz dize için NumberFormatException yakalıyordu - performans büyük veri setlerinde ciddi şekilde düştü).
Hikaye
JVM için Kotlin üzerinden çağrılan Java kodunda checked exceptions (
throws) beyan edildi. Kotlin kodu istisnaları ele almadı, "her şey unchecked" düşündü - bu nedenle kritik bir hata, üretim olayına kadar göz ardı edildi.