Hata yönetimi
- Kotlin kursu
- Başlangıç
- Ders 115/116
- 6 dk
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
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
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
class TaskNotFound(message: String) : ____(message)
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 |