Rangkuman: Meter Parkir
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 21 dari 57.
Tantangan
SedangLengkapi factory make_meter(rate) di Meter.R. rate adalah jumlah menit yang dibeli dengan satu sen. Kunci nilainya dengan lockBinding() di dalam factory agar tidak pernah berubah. Meter menyimpan sisa menit dan jumlah sen yang dibayarkan sebagai variabel privat, lalu mengembalikan empat fungsi:
insert(cents)hanya menerima 10, 20, 50, atau 100. Jika tidak, fungsi ini berhenti dengancoin not accepted. Setiap koin menambahkancents * ratemenit dan menambah jumlah yang dibayarkan.wait(minutes)membiarkan waktu berlalu: sisa menit berkurang, tetapi tidak pernah kurang dari 0. Waktu tunggu negatif membuat fungsi ini berhenti dengantime cannot go back.status()mengembalikan12 min left, atauexpiredjika tidak ada waktu tersisa.paid()mengembalikan jumlah sen yang dibayarkan.
Gunakan call. = FALSE. Kode yang disediakan membaca rate, lalu baris seperti coin 20 atau wait 5, kemudian mencetak status atau error: dan pesannya setelah setiap baris. Terakhir, kode mencetak jumlah yang dibayarkan dan mencoba mengubah rate di dalam environment factory.
Tulis kodemu di Meter.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
source("Meter.R")
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
meter <- make_meter(as.numeric(input[1]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
msg <- tryCatch({
if (p[1] == "coin") meter$insert(as.numeric(p[2]))
if (p[1] == "wait") meter$wait(as.numeric(p[2]))
meter$status()
}, error = function(e) paste("error:", conditionMessage(e)))
cat(line, ": ", msg, "\n", sep = "")
}
cat("paid: ", meter$paid(), " cents\n", sep = "")
r <- tryCatch({ environment(meter$insert)$rate <- 0; "rate changed" }, error = function(e) "rate is locked")
cat(r, "\n", sep = "")
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam BukuLatihan sendiri: Compiler R online