Menu
CoddyTech

Buku dan Anggota

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 50 dari 57.

Dalam proyek ini, kamu membangun inti sistem perpustakaan. Sebuah class Library menerima perintah, satu per baris, lalu membalas setiap perintah. Dalam lima langkah, sistem ini belajar menambahkan buku dan anggota, meminjam dan mengembalikan buku, mencari katalog, serta mencetak laporan.

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

Model data ini menggunakan alat dari bagian ini. Book adalah struct: sebuah nilai yang borrower-nya berubah. Member adalah class, karena library dan daftar pinjaman seorang member merujuk pada orang yang sama. Library menyimpan keduanya dalam dictionary privat, sehingga hanya method-nya yang dapat mengubahnya:

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)

Output:

false

handle(_:) memisahkan perintah dan memilih cabang berdasarkan kata pertamanya. Setiap cabang mengembalikan balasannya sebagai array, sehingga perintah seperti REPORT dapat membalas dengan beberapa baris. Judul buku dapat berisi spasi, jadi judulnya mencakup semua teks setelah id:

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)")

Output:

7: The Hobbit
challenge icon

Tantangan

Mudah

Lengkapi Library.handle(_:) untuk dua perintah pertama:

  • ADD_BOOK <id> <title>: simpan buku baru yang tersedia dan balas added book 1: Dune; jika id sudah digunakan, balas book 1 exists.
  • JOIN <name>: tambahkan anggota dan balas welcome ada; jika nama sudah ada, balas ada is already a member.

Kode yang disediakan meneruskan setiap baris input ke library.handle(_:) dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Nama anggota berupa satu kata dengan huruf kecil, id buku berupa bilangan bulat, dan input hanya berisi perintah yang dijelaskan sejauh ini. Perintah lainnya akan dibalas dengan unknown command.

Tulis kodemu di Book.swift, Member.swift, dan Library.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift