Menu
CoddyTech

Rangkuman: Uang dan Mata Uang

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

challenge icon

Tantangan

Sedang

Buat library uang sederhana dalam dua file.

  • Money.R: class Money (slot amount, currency) dengan aturan validitas currency must be 3 capital letters (periksa dengan grepl("^[A-Z]{3}$", ...)); method show() yang mencetak 12.50 EUR dan baris baru; + untuk dua object Money yang menghasilkan error cannot add EUR and USD (gunakan call. = FALSE); dan Arith untuk Money dan angka dengan callGeneric().
  • Convert.R: generic convert(m, to, rates) dengan method untuk signature("Money", "character") yang mengonversi melalui rates, yang menyatakan berapa banyak unit setiap mata uang setara dengan 1 EUR: 11 USD setara dengan 10 EUR.

Code yang disediakan menyimpan wallet dan membaca perintah add 10 EUR, sum (menjumlahkan seluruh wallet), convert 2 USD (item kedua), atau double 1, lalu mencetak setiap hasil atau error: dan pesannya.

Tulis kodemu di Money.R dan Convert.R. main.R berisi code input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

source("Money.R")
source("Convert.R")

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
rates <- c(EUR = 1, USD = 1.1, GBP = 0.85)
wallet <- list()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  out <- tryCatch({
    if (p[1] == "add") {
      m <- new("Money", amount = as.numeric(p[2]), currency = p[3])
      wallet[[length(wallet) + 1]] <- m
      print(m)
    } else if (p[1] == "sum") {
      print(Reduce(`+`, wallet))
    } else if (p[1] == "convert") {
      print(convert(wallet[[as.numeric(p[2])]], p[3], rates))
    } else if (p[1] == "double") {
      print(wallet[[as.numeric(p[2])]] * 2)
    }
  }, error = function(e) cat("error: ", sub(".*object: ", "", conditionMessage(e)), "\n", sep = ""))
}

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online