Kotlin-də istisnaları düzgün necə işləmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də istisnalarla işləmə try...catch...finally quruluşu ilə həyata keçirilir. Java kodu ilə qarşılıqlı əlaqə üçün @Throws ilə işarələnmiş funksiyaları çağırmaq mümkündür.
fun readFile(path: String): String {
return try {
// Təhlükəli kodu icra etməyə cəhd
java.io.File(path).readText()
} catch (e: java.io.IOException) {
// Xüsusi istisnanı idarə etmək
println("Faylı oxuyarkən xəta: ${e.message}")
"" // Xəta halında default dəyər
} finally {
// Hər zaman icra olunan blok
println("Fayl oxuma tamamlandı")
}
}
Fərqli növ istisnaları idarə etmək üçün bir neçə catch bloku istifadə oluna bilər:
fun processData(data: String) {
try {
// NumberFormatException və ya NullPointerException yarada bilən kod
val number = data.toInt()
println("Rəqəm: $number")
} catch (e: NumberFormatException) {
println("Yanlış rəqəm formatı: ${e.message}")
} catch (e: NullPointerException) {
println("Null məlumatlar alındı: ${e.message}")
}
}
Kotlin-də checked-istisnalar yoxdur, Java kimi. Funksiyalar @Throws istifadə edərək istisnaları bildirsə də, bu məcburi deyil.
Əgər funksiya uğurlu və ya uğursuz nəticə ilə bitə bilərsə, çox vaxt sealed-klasslar və ya Kotlin-in Result tipi (eksperimental versiyalarda) istifadə olunur, xüsusən asinxron kodlarda.
Sealed-klass nümunəsi:
sealed class Result<out T>
data class Success<out T>(val value: T) : Result<T>()
data class Error(val exception: Throwable) : Result<Nothing>()
fun safelyDivide(a: Int, b: Int): Result<Int> {
return try {
if (b == 0) {
throw ArithmeticException("Sıfıra bölmə")
}
Success(a / b)
} catch (e: Throwable) {
Error(e)
}
}
// İstifadə:
fun processDivision() {
when (val divisionResult = safelyDivide(10, 0)) {
is Success -> println("Nəticə: ${divisionResult.value}")
is Error -> println("Xəta: ${divisionResult.exception.message}")
}
}
Yalnız idarə edə biləcəyiniz istisnaları tutmaq vacibdir. Boş catch bloklarından qaçının. Lazım gələrsə, istisnaları logda qeyd edə bilərsiniz.
throw açar sözündən istifadə edərək istisnaları açıq şəkildə ata bilərsiniz:
fun requirePositive(number: Int) {
if (number <= 0) {
throw IllegalArgumentException("Rəqəm müsbət olmalıdır")
}
}