CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm parçaları birleştirerek çalışan bir final uygulaması yazarsın.

Birleştirme: tüm akış

Son derste tüm parçaları birleştirirsin: görev ekleme, tamamlama ve tamamlananları yazdırma. Uygulama, gerçek bir görev takip aracının küçük bir örneği olur.

val list = TaskList()
list.addTask("Kotlin çalış")
list.addTask("Alışveriş")
list.complete(0)
println(list.listDone())
// [[x] Kotlin çalış]

Bu akış addTask, complete ve listDone yöntemlerini art arda çağırır. Her biri önceki derslerde tanımladığın bir parçadır. Böylece gerçek bir kullanım senaryosu tamamlanır.

Akışın tasarımı

Uygulamanın akışı şöyledir: önce listeye görevler eklenir, sonra biri tamamlanır, en son tamamlananlar yazdırılır. Her adım, önceki derslerde tanımlanan bir yöntemi çağırır.

list.addTask("Kotlin çalış")   // L02
list.addTask("Alışveriş")     // L02
list.complete(0)              // L04
println(list.listDone())      // L03

Bu akış, birikimli tasarımın gücünü gösterir. Her ders bir parça ekledi ve son ders hepsini bir araya getirdi. Gerçek dünyada da uygulamalar böyle aşama aşama büyür.

Uygulama Tüm akışı birleştir

main'de val list = TaskList() oluştur. list.addTask("Kotlin çalış") ve list.addTask("Alışveriş") çağır. list.complete(0) ile ilk görevi tamamla. Son olarak println ile list.listDone()'u 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 }
    fun complete(index: Int) {
        if (index >= tasks.size) throw TaskNotFound("Görev yok: $index")
        tasks[index].done = true
    }
}

fun main() {
    val list = TaskList()
    // İki görev ekle, birini complete ile bitir, tamamlananları 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ış")
    list.addTask("Alışveriş")
    list.complete(0)
    println(list.listDone())
}

Beklenen çıktı

[[x] Kotlin çalış]

Soru ve cevaplar

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

1 Yöntem ve amacı eşleştir

Kavram Anlamı
addTask Görev ekle
complete Görevi bitir
listDone Tamamlananları al
TaskNotFound Hata türü

2 Bu projede dallar nasıl seçiliyor?

  • Sadece for
  • Sadece if
  • when ile dallar Doğru cevap
  • Sadece try

Açıklama: Proje akışında when ile dallar kullanılır.

3 Boşluğu doldur: complete çağır

Soru
try {
    list.____(0)
} catch (e: TaskNotFound) {
    println(e.message)
}
Cevap
try {
    list.complete(0)
} catch (e: TaskNotFound) {
    println(e.message)
}

Açıklama: list.complete(0) ilk görevi tamamlar.

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