ProgramlamaBackend geliştirici

Kotlin'de exception handling nasıl çalışır? Nüanslardan bahsedin, Java'dan farkları, checked/unchecked istisnaların işlenmesi, 'try', 'catch', 'finally', propagation ve en iyi uygulamalar hakkında bilgi verin. Bir örnek verin.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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.

Temel noktalar:

  • try/catch/finally blokları, istisnaları yakalayıp işlemeye olanak tanır. finally bloğu, istisna fırlatılmış olsa bile her zaman çalışır.
  • Java'dan farkı: Kotlin'de tüm istisnalar unchecked'tır. Bu, sözdizimini basitleştirir, ancak hata yönetimi için dikkatli bir yaklaşım gerektirir.
  • Kotlin, try bloğunun "return value" desteklemesine sahiptir; yani try bir ifade olarak kullanılabilir ve sonuç döndürebilir.
  • Yeni iktidar kalıpları: 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 }

En iyi uygulamalar:

  • Akış kontrolü (flow control) için kullanılmamalıdır.
  • use ile kaynak yönetimi kullanarak otomatik kapatma yapın (örneğin, dosyalar için).
  • Boş bir catch ile istisnaları bastırmayın.

Kandırmaca soru.

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).

Konuyla ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri.


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.