Buku dan Anggota
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 50 dari 57.
Dalam proyek ini, kamu membangun inti dari sistem library. 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
REPORTModel data menggunakan hal-hal yang diajarkan di bagian ini. Book dan Member masing-masing berada di file tersendiri. borrower milik sebuah buku dapat dibaca di mana saja, tetapi hanya berubah melalui lendTo dan giveBack, dan sebuah member menampilkan id pinjamannya sebagai List hanya-baca. Library menyimpan keduanya dalam map privat, jadi hanya method miliknya sendiri yang dapat mengubahnya:
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 }
}Di dalam main:
val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")Output:
false adahandle(line) memisahkan perintah dan menggunakan when pada kata pertamanya. Setiap cabang mengembalikan balasannya sebagai List<String>, sehingga perintah seperti REPORT dapat membalas dengan beberapa baris, dan return lebih awal mengembalikan penolakan. Judul buku dapat berisi spasi, jadi judulnya mencakup semua teks setelah id:
Di dalam main:
val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")Output:
7: The HobbitTantangan
MudahLengkapi Library.handle(line) untuk dua perintah pertama:
ADD_BOOK <id> <title>: simpan buku baru yang tersedia dan berikan balasanadded book 1: Dune; jika id sudah digunakan, berikan balasanbook 1 exists.JOIN <name>: tambahkan anggota dan berikan balasanwelcome ada; jika nama sudah ada, berikan balasanada is already a member.
Kode yang disediakan meneruskan setiap baris input ke library.handle(line) 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 telah dijelaskan sejauh ini. Perintah lain apa pun akan memberikan balasan unknown command.
Tulis kodemu di Book.kt, Member.kt, dan Library.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
val library = Library()
for (line in input) {
for (reply in library.handle(line)) println(reply)
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin