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
REPORTVeri 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ı:
falsehandle(_:) 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 HobbitGörev
Kolayİlk iki komut için Library.handle(_:) işlevini tamamla:
ADD_BOOK <id> <title>: kullanılabilir yeni bir kitabı kaydet veadded book 1: Duneyanıtını ver; id kullanımdaysabook 1 existsyanıtını ver.JOIN <name>: bir üye ekle vewelcome adayanıtını ver; ad mevcutsaada is already a memberyanı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) }
}
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
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaMetotlar ve selfBaşlatıcılarSınıflar ReferanstırTekrar - Kütüphane Kartı4Kapsülleme
Erişim DenetimiDışarıdan Salt OkunurDurumu KorumaBaşarısız Olabilen BaşlatıcılarTekrar - Banka Hesabı7Polimorfizm ve Generic'ler
PolimorfizmTür DönüşümüGeneric FonksiyonlarGeneric TürlerTekrar - Şekil Hesaplayıcı2Struct Yapıları ve Değer Türleri
Struct YapılarıDeğer SemantiğiDeğiştirici MetotlarStruct mı Class mıTekrar - Envanter Öğesi5Kalıtım
Alt sınıflarMetotları Geçersiz KılmaBaşlatıcılar ve superfinal ve HiyerarşilerTekrar - Çalışan Hiyerarşisi11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Swift playground