CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

Main.kt
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 }
    // complete metodunu yaz: sınır dışı indekste TaskNotFound fırlat
}

fun main() {
    val list = TaskList()
    // Bir görev ekle; complete(5) çağır; hatayı yakala ve mesajı yazdır
}

Örnek çözüm

Main.kt
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)
    }
}

Beklenen çıktı

Görev yok: 5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boşluğu doldur: TaskNotFound tanımla

Soru
class TaskNotFound(message: String) : ____(message)
Cevap
class TaskNotFound(message: String) : Exception(message)

Açıklama: Exception üst sınıf olarak kullanılır.

2 Özel exception neden tanımlanır?

  • Daha az kod
  • Daha anlamlı hata türleri için Doğru cevap
  • Daha az bellek
  • Hız artışı

Açıklama: Uygulamaya özgü hata türleri daha anlamlıdır.

3 Parça ve rol eşleştir

Kavram Anlamı
class TaskNotFound Hata sınıfı
: Exception Üst sınıf
throw TaskNotFound Fırlatma
catch (e: TaskNotFound) Yakalama

Başlangıç bölümündeki tüm dersler