Kotlin
Görev tamamlama
completeTask ile görev durumunu güncellemeyi öğrenirsin.
Görev tamamlama: completeTask ve copy
Bir görevi tamamlamak için completeTask(title) metodu, listede başlığı eşleşen görevi bulup done'ı true yapar. Task veri sınıfı değişmez (immutable) olduğundan, copy(done = true) ile yeni bir kopya oluşturup listedeki yeriyle değiştiririz.
fun completeTask(title: String) {
val i = tasks.indexOfFirst { it.title == title }
if (i >= 0) {
tasks[i] = tasks[i].copy(done = true)
}
}
indexOfFirst { } koşula uyan ilk indeksi verir; yoksa -1. i >= 0 denetimi, yalnızca görev bulunduysa güncelleme yapmayı sağlar.
indexOfFirst ve bulunamayan görev
indexOfFirst { koşul } koşula uyan ilk elemanın indeksini verir; hiçbiri uymazsa -1 döner. Bu davranış, completeTask'ın olmayan bir başlık çağrıldığında sessizce hiçbir şey yapmasını sağlar.
val i = tasks.indexOfFirst { it.title == "Yok" }
// i = -1; if (i >= 0) bloğu çalışmaz
Bu "sessiz sessizce geç" yaklaşımı, CLI'da kullanıcı yanlış başlık yazdığında uygulamanın çökmemesini sağlar. İstersen "görev bulunamadı" mesajı da ekleyebilirsin.
Uygulama completeTask metodunu ekle ve çağır
TodoList'e fun completeTask(title: String) metodunu ekle: val i = tasks.indexOfFirst { it.title == title } ile bul, if (i >= 0) bloğunda tasks[i] = tasks[i].copy(done = true) yap. main içinde iki görev ekle, completeTask("Ödev") çağır ve listTasks() ile yazdır.
Örnek çözümü göster
fun main() {
val list = TodoList()
list.addTask("Alışveriş")
list.addTask("Ödev")
list.completeTask("Ödev")
list.listTasks()
}
data class Task(val title: String, val done: Boolean = false) {
fun format() = if (done) "[x] $title" else "[ ] $title"
}
class TodoList {
val tasks = mutableListOf<Task>()
fun addTask(title: String) {
tasks.add(Task(title))
}
fun listTasks() {
tasks.forEach { println(it.format()) }
}
fun completeTask(title: String) {
val i = tasks.indexOfFirst { it.title == title }
if (i >= 0) {
tasks[i] = tasks[i].copy(done = true)
}
}
}
Kendini test et
-
İfadeyi rolüyle eşleştir
- completeTask(title)
- Görevi tamamlar
- indexOfFirst { }
- İlk eşleşmenin indeksi
- copy(done = true)
- Yeni kopya, done = true
- tasks[i] = ...
- Listedeki yeri güncellenir
-
completeTask nasıl bir güncelleme yapar?
- Yeni bir liste yapar
- copy ile yeni Task yaratıp yerine koyar
- Eski Task'ı siler
- Task'ı null yapar
Cevabı göster
copy ile yeni Task yaratıp yerine koyar — Task değişmez olduğundan copy ile yeni kopya yapıp yerine koyarız.
-
Boşluğu doldur: copy ile güncelle
tasks[i] = tasks[i].____(done = true)
Cevabı göster
tasks[i] = tasks[i].copy(done = true)
Sıradaki ders: Birleştirme