Kotlin
Hata yönetimi
try/catch ile hata yönetimi eklersin.
Özel hata: TaskNotFound
Bu projede geçersiz indeksler için TaskNotFound adında özel bir exception tanımlarız. Böylece hata türü, nedenini açıkça anlatır.
class TaskNotFound(message: String) : Exception(message)
throw TaskNotFound("Görev yok: 5")
Sınıf, Exception'dan miras alır ve mesajı yapıcıyla iletir. Böylece hata yakalandığında e.message anlamlı bir içerik verir. Özel tür, hem yakalamayı hem de hata ayıklamayı kolaylaştırır.
complete metodu ve try/catch
complete(index) metodu verilen indeksteki görevi tamamlar. İndeks listeden büyükse TaskNotFound fırlatır; çağıran bunu try/catch ile yakalar.
fun complete(index: Int) {
if (index >= tasks.size)
throw TaskNotFound("Görev yok: $index")
tasks[index].done = true
}
try {
list.complete(5)
} catch (e: TaskNotFound) {
println(e.message)
}
Sınır denetimi, hata fırlatmadan önce yapılır. tasks.size listenin uzunluğunu verir; indeks buna eşit veya büyükse sınırdan dışarıdır. catch (e: TaskNotFound) yalnızca bu türü yakalar.
Uygulama complete metodunu ve try/catch'i ekle
TaskList sınıfına fun complete(index: Int) ekle: indeks tasks.size'dan büyük veya eşitse throw TaskNotFound("Görev yok: $index") fırlat; değilse tasks[index].done = true yap. main'de bir görev ekle, list.complete(5) çağır; try/catch ile TaskNotFound yakala ve e.message'i yazdır.
Örnek çözümü göster
class Task(val title: String) {
var done: Boolean = false
override fun toString(): String {
return if (done) "[x] $title" else "[ ] $title"
}
}
class TaskNotFound(message: String) : Exception(message)
class TaskList {
val tasks = mutableListOf<Task>()
fun addTask(title: String) {
tasks.add(Task(title))
}
fun listDone() = tasks.filter { it.done }
fun complete(index: Int) {
if (index >= tasks.size) throw TaskNotFound("Görev yok: $index")
tasks[index].done = true
}
}
fun main() {
val list = TaskList()
list.addTask("Kotlin çalış")
try {
list.complete(5)
} catch (e: TaskNotFound) {
println(e.message)
}
}
Kendini test et
-
Boşluğu doldur: TaskNotFound tanımla
class TaskNotFound(message: String) : ____(message)
Cevabı göster
class TaskNotFound(message: String) : Exception(message)
-
Özel exception neden tanımlanır?
- Daha az kod
- Daha anlamlı hata türleri için
- Daha az bellek
- Hız artışı
Cevabı göster
Daha anlamlı hata türleri için — Uygulamaya özgü hata türleri daha anlamlıdır.
-
Parça ve rol eşleştir
- class TaskNotFound
- Hata sınıfı
- : Exception
- Üst sınıf
- throw TaskNotFound
- Fırlatma
- catch (e: TaskNotFound)
- Yakalama
Sıradaki ders: Birleştirme