Menu
Coddy logo textTech

Kitaplar ve Üyeler

Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 57.

Bu projede bir kütüphane sisteminin temelini oluşturacaksın. Bir Library sınıfı, her satırda bir komut alır ve her birine yanıt verir. Beş adım boyunca kitaplar ve üyeler eklemeyi, kitapları ödünç vermeyi ve geri almayı, katalogda arama yapmayı ve bir rapor yazdırmayı öğrenir:

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

Veri modeli, bu bölümde öğretilenleri kullanır. Book ve Member sınıflarının her biri kendi dosyasında bulunur. Bir kitabın borrower değerini her yerden okuyabilirsin, ancak bu değer yalnızca lendTo ve giveBack aracılığıyla değiştirilebilir; ayrıca bir üye, ödünç aldığı kitapların kimliklerini salt okunur bir List olarak sunar. Kütüphane her ikisini de özel eşlemelerde tutar; bu nedenle onları yalnızca kendi yöntemleri değiştirebilir:

class Book(val id: Int, val title: String) {
    var borrower: String? = null
        private set
    val isAvailable: Boolean
        get() = borrower == null
    fun lendTo(name: String) { borrower = name }
}

main içinde:

val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")

Çıktı:

false ada

handle(line) komutu parçalara ayırır ve ilk sözcüğü üzerinde bir when kullanır. Her dal, yanıtlarını bir List<String> olarak döndürür; böylece REPORT gibi bir komut birkaç satırla yanıt verebilir ve erken bir return bir reddetme yanıtını geri döndürür. Bir kitabın başlığı boşluklar içerebilir; bu nedenle id'den sonraki her şey başlığa aittir:

main içinde:

val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")

Çıktı:

7: The Hobbit
challenge icon

Görev

Kolay

İlk iki komut için Library.handle(line) işlevini tamamla:

  • ADD_BOOK <id> <title>: kullanılabilir yeni bir kitabı kaydet ve added book 1: Dune yanıtını ver; id zaten kullanılıyorsa book 1 exists yanıtını ver.
  • JOIN <name>: bir üye ekle ve welcome ada yanıtını ver; ad mevcutsa ada is already a member yanıtını ver.

Sağlanan kod, her girdi satırını library.handle(line) işlevine iletir ve döndürülen her yanıtı kendi satırında yazdırır. Üye adları tek kelimelik küçük harflerden oluşur, kitap kimlikleri tam sayılardır ve girdi yalnızca şimdiye kadar açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.

Kodun Book.kt, Member.kt ve Library.kt dosyalarına yazılmalıdır. Main.kt sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

fun main() {
    // Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
    val input = generateSequence(::readLine).toList()
    val library = Library()
    for (line in input) {
        for (reply in library.handle(line)) println(reply)
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Kotlin playground