Menu
Coddy logo textTech

Kitaplar ve Üyeler

Coddy'nin Swift 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 tane olmak üzere komutları alır ve her birine yanıt verir. Beş adım boyunca kitap ve üye eklemeyi, kitap ö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ümün araçlarını kullanır. Book bir struct'tır: borrower değeri değişen bir değer. Member bir sınıftır, çünkü kütüphane ve bir üyenin ödünç alma listesi aynı kişiye başvurur. Kütüphane her ikisini de özel sözlüklerde tutar; böylece yalnızca yöntemleri bunları değiştirebilir:

struct Book {
    let id: Int
    let title: String
    var borrower: String? = nil
    var isAvailable: Bool { borrower == nil }
}

var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)

Çıktı:

false

handle(_:) komutu böler ve ilk sözcüğüne göre seçim yapar. Her dal, yanıtlarını bir dizi olarak döndürür; bu nedenle REPORT gibi bir komut birkaç satırla yanıt verebilir. Bir kitabın başlığı boşluklar içerebilir; bu yüzden başlık, id'den sonraki her şeydir:

let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")

Çıktı:

7: The Hobbit
challenge icon

Görev

Kolay

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

  • ADD_BOOK <id> <title>: kullanılabilir yeni bir kitabı kaydet ve added book 1: Dune yanıtını ver; id kullanımdaysa 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(_:) işlevine aktarır ve döndürülen her yanıtı kendi satırına yazdırır. Üye adları tek ve küçük harfli sözcüklerden 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.swift, Member.swift ve Library.swift dosyalarına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var input: [String] = []
while let line = readLine() { input.append(line) }
let library = Library()
for line in input {
    for reply in library.handle(line) { print(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: Swift playground