CodeBlanks Logo Icon CodeBlanks

Birleştirme

Kütüphane sınıfını menü döngüsüyle birleştirirsin.

Birleştirme

Son derste tüm parçaları bir when ifadesiyle birleştirirsin. when (command) { "checkout" -> lib.checkout("M1", "978-1"); "return" -> lib.returnBook("978-1"); "list" -> lib.books.forEach { println(it) } } biçiminde bir komut işleyici yazılır.

Her dal farklı bir işlemi temsil eder: checkout ödünç verir, return iade alır, list tüm kitapları yazdırır. command değişkeni hangi dalın çalışacağını belirler; yalnızca eşleşen dal yürütülür. Böylece kütüphane uygulaması bir komut döngüsüne hazır hale gelir.

Komut işleyici

Tüm uygulama bir araya gelir: Library sınıfı kitap, üye, ödünç ve arama yönetimini taşır; main bir komut alır ve when ile ilgili metodu çağırır. Örnek: val command = "checkout"; when (command) { "checkout" -> lib.checkout("M1", "978-1") }.

Bu yapıyı bir döngüye alarak kullanıcıdan komut okuyan gerçek bir konsol uygulamasına dönüştürebilirsin. Şimdilik tek komut işleyerek akışı test ediyorsun. Derste checkout komutu çalışacak ve ekrana ödünç mesajı yazılacak.

Uygulama when ile komut işle

main içinde bir Library oluştur, bir kitap ve bir üye ekle. val command = "checkout" tanımla ve when (command) ile üç dal yaz: "checkout" -> lib.checkout("M1", "978-1"), "return" -> lib.returnBook("978-1"), "list" -> lib.books.forEach { println(it) }. Önceki derslerin Library sınıfı tanımlı kalsın.

Başlangıç kodu

Main.kt
fun main() {
    val lib = Library()
    lib.addBook(Book("Suç ve Ceza", "Dostoyevski", "978-1"))
    lib.addMember(Member("Ayşe", "M1"))
    // when ile komutu işle ve sonucu yazdır
}

// Book, Member ve Library sınıfları önceki derslerde tanımlandığı gibi durur.
// Library: books, members, borrowed, addBook, addMember, checkout, returnBook, searchByAuthor, availableBooks

Örnek çözüm

Main.kt
data class Book(val title: String, val author: String, val isbn: String)
data class Member(val name: String, val id: String)

class Library {
    val books = mutableListOf<Book>()
    val members = mutableListOf<Member>()
    val borrowed = mutableMapOf<String, String>()
    fun addBook(book: Book) { books.add(book) }
    fun addMember(member: Member) { members.add(member) }
    fun checkout(memberId: String, isbn: String) {
        borrowed[isbn] = memberId
        println("Ödünç: $memberId -> $isbn")
    }
    fun returnBook(isbn: String) {
        borrowed.remove(isbn)
        println("İade: $isbn")
    }
    fun searchByAuthor(author: String): List<Book> = books.filter { it.author == author }
    fun availableBooks(): List<Book> = books.filter { it.isbn !in borrowed }
}

fun main() {
    val lib = Library()
    lib.addBook(Book("Suç ve Ceza", "Dostoyevski", "978-1"))
    lib.addMember(Member("Ayşe", "M1"))
    val command = "checkout"
    when (command) {
        "checkout" -> lib.checkout("M1", "978-1")
        "return" -> lib.returnBook("978-1")
        "list" -> lib.books.forEach { println(it) }
    }
}

Beklenen çıktı

Ödünç: M1 -> 978-1

Soru ve cevaplar

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

1 when dallarını eşle

Kavram Anlamı
"checkout" Ödünç ver
"return" İade al
"list" Listele
when (command) Komut seç

2 when (command) { "checkout" -> ... } ne yapar?

  • Hiçbir şey yapmaz
  • Tüm dalları çalıştırır
  • Eşleşen komutun dalını çalıştırır Doğru cevap
  • Yalnızca ilk dalı çalıştırır

Açıklama: when yalnızca eşleşen dalı yürütür.

3 when dalını tamamla

Soru
when (command) {
    "checkout" -> lib.____("M1", "978-1")
}
Cevap
when (command) {
    "checkout" -> lib.checkout("M1", "978-1")
}

Açıklama: checkout dalı ödünç verme metodunu çağırır.

Orta seviye bölümündeki tüm dersler