Menu
CoddyTech

Buku dan Anggota

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 50 dari 57.

Dalam proyek ini, kamu membangun inti sistem library dengan Reference Classes, karena buku dan anggota berubah saat program berjalan: buku dipinjam dan dikembalikan, daftar pinjaman anggota bertambah dan berkurang. object Library menerima perintah, satu per baris, lalu membalas setiap perintah. Dalam lima langkah, kamu akan 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

Program ini menggunakan satu class untuk setiap file. Book.R dan Member.R menyimpan dua class kecil, dan Library.R menyimpan class yang menyimpan keduanya dalam dua list bernama dan menanggapi perintah. Karena object RC adalah referensi, perubahan pada buku yang dicari dalam list juga mengubah buku di perpustakaan:

Book <- setRefClass("Book", fields = list(id = "numeric", title = "character", borrower = "character"))
books <- list()
books[["7"]] <- Book$new(id = 7, title = "Dune")
b <- books[["7"]]
b$borrower <- "ada"
cat(books[["7"]]$borrower, is.null(books[["9"]]))

Output:

ada TRUE

handle(line) memisahkan perintah dan menggunakan switch() pada kata pertamanya untuk memanggil method bagi perintah tersebut. Setiap method mengembalikan balasannya sebagai vektor karakter, sehingga perintah seperti REPORT dapat membalas dengan beberapa baris. Judul dapat berisi spasi, jadi judul mencakup semua yang muncul setelah id:

p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")

Output:

7: The Hobbit
challenge icon

Tantangan

Mudah

class Book (field id, title, borrower) dan Member (field name, borrowed) sudah tersedia. Lengkapi dua method Library di Library.R:

  • add_book(id, title) untuk ADD_BOOK <id> <title>: simpan buku baru dengan kunci as.character(id) dan berikan balasan added book 1: Dune; jika id sudah digunakan, berikan balasan book 1 exists.
  • join(name) untuk JOIN <name>: simpan member baru dengan nama tersebut dan berikan balasan welcome ada; jika nama sudah ada, berikan balasan ada is already a member.

Kode yang disediakan mengirim setiap baris input ke lib$handle(line) dan mencetak setiap balasan yang dikembalikan pada baris tersendiri. Nama member berupa satu kata dengan huruf kecil, id buku berupa bilangan bulat, dan input hanya berisi perintah yang telah dijelaskan sejauh ini. Perintah lain akan memberikan balasan unknown command.

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

Coba sendiri

source("Book.R")
source("Member.R")
source("Library.R")

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
  for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online