Birleştirme
- Kotlin kursu
- Başlangıç
- Ders 87/116
- 6 dk
Menü döngüsüyle çalışan bir CLI uygulaması yazarsın.
Birleştirme: tam CLI senaryosu
Artık tüm parçalar hazır: Task veri sınıfı, TodoList ile addTask, listTasks ve completeTask. Bu son derste bunları bir senaryo halinde birleştireceksin.
val list = TodoList()
list.addTask("Alışveriş")
list.addTask("Ödev")
list.addTask("Spor")
list.completeTask("Ödev")
list.listTasks()Bir gerçek CLI'da bu çağrılar bir menü döngüsü içinde kullanıcıdan gelen komutlarla yapılır. Burada senaryoyu sabit tutuyoruz; böylece çıktı deterministik olur.
Menü döngüsü kavramı
Bir gerçek CLI'da while (true) döngüsü içinde kullanıcıdan komut okunur ve when ile ilgili metot çağrılır. Bu derste senaryoyu sabit tuttuğumuz için döngü yok; ama mantığı aynıdır.
while (true) {
val cmd = readln()
when (cmd.substringBefore(':')) {
"add" -> list.addTask(cmd.substringAfter(':'))
"done" -> list.completeTask(cmd.substringAfter(':'))
"list" -> list.listTasks()
else -> return
}
}Bu yapı, komutların sırasını kullanıcı belirler. Bizim senaryomuzda ise sıra kod içinde sabittir; bu da deterministik test çıktısı sağlar.
Uygulama Tam CLI senaryosunu çalıştır
main içinde bir TodoList oluştur. Sırayla üç görev ekle: list.addTask("Alışveriş"), list.addTask("Ödev"), list.addTask("Spor"). Sonra list.completeTask("Ödev") ile Ödev'i tamamla ve list.listTasks() ile tüm görevleri yazdır.
Başlangıç kodu
fun main() {
val list = TodoList()
// 3 görev ekle, 1 tanesini tamamla, listTasks ile yazdır
}
// Task ve TodoList sınıfları önceki derslerde tanımlandığı gibi durur.Örnek çözüm
fun main() {
val list = TodoList()
list.addTask("Alışveriş")
list.addTask("Ödev")
list.addTask("Spor")
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) }
}
}Beklenen çıktı
[ ] Alışveriş [x] Ödev [ ] Spor
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi sıra hem ekleme hem tamamlama hem listelemeyi yapar?
- completeTask, addTask
- addTask, listTasks
- addTask, addTask, addTask, completeTask, listTasks Doğru cevap
- listTasks, listTasks, listTasks
Açıklama: Üç ekleme, bir tamamlama ve bir listeleme tam senaryoyu verir.
2 Metodu rolüyle eşleştir
| Kavram | Anlamı |
|---|---|
addTask |
Görev ekle |
completeTask |
Görevi tamamla |
listTasks |
Tüm görevleri yazdır |
copy(done = true) |
Yeni kopya, done true |
3 Boşluğu doldur: menü döngüsü
for (cmd ____ menu) list.handle(cmd)
for (cmd in menu) list.handle(cmd)
Açıklama: for (cmd in menü) komut dizisini gezer.