Menu
CoddyTech

Kitaplar ve Üyeler

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 50 / 57.

Bu projede, program çalışırken kitaplar ve üyeler değiştiği için Referans Sınıfları kullanarak bir kütüphane sisteminin temelini oluşturacaksın: kitap ödünç verilir ve geri getirilir, bir üyenin ödünç aldığı kitapların listesi uzar ve kısalır. Bir Library nesnesi, her satırda bir tane olmak üzere komutları alır ve her birine yanıt verir. Beş adımda kitap ve üye eklemeyi, kitap ödünç verip geri almayı, kataloğu aramayı ve rapor yazdırmayı öğrenir.

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

Programda her dosyada bir sınıf bulunur. Book.R ve Member.R iki küçük sınıfı, Library.R ise bunları adlandırılmış iki listede saklayan ve komutları yanıtlayan sınıfı içerir. RC nesneleri başvuru türünde olduğundan, listede aranan bir kitabı değiştirmek kütüphanedeki kitabı da değiştirir:

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

Çıktı:

ada TRUE

handle(line) komutu parçalara ayırır ve bu komuta ait yöntemi çağırmak için ilk sözcüğü üzerinde switch() kullanır. Her yöntem yanıtlarını bir karakter vektörü olarak döndürür; bu nedenle REPORT gibi bir komut birden fazla satırla yanıt verebilir. Bir başlık boşluk içerebilir, bu yüzden kimlikten sonraki her şey başlıktır:

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

Çıktı:

7: The Hobbit
challenge icon

Görev

Kolay

Book (alanları id, title, borrower) ve Member (alanları name, borrowed) sınıfları verilmiştir. Library sınıfının Library.R dosyasındaki iki metodunu tamamlayın:

  • ADD_BOOK <id> <title> için add_book(id, title): yeni bir kitabı as.character(id) altında saklayın ve added book 1: Dune yanıtını verin; id kullanımda olduğunda book 1 exists yanıtını verin.
  • JOIN <name> için join(name): yeni bir üyeyi adı altında saklayın ve welcome ada yanıtını verin; ad zaten mevcut olduğunda ada is already a member yanıtını verin.

Sağlanan kod, her girdi satırını lib$handle(line) işlevine gönderir ve döndürülen her yanıtı ayrı bir satıra yazdırır. Üye adları tek kelimelik ve tamamen küçük harflidir; kitap kimlikleri tam sayıdır ve girdi yalnızca şimdiye kadar açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.

Kodunuzu Book.R, Member.R ve Library.R dosyalarına yazın. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

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

# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
  for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Tabanlı Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi