Menu
Coddy logo textTech

Rückblick – Geld und Währung

Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 31 von 57.

challenge icon

Aufgabe

Mittel

Erstelle eine kleine Geldbibliothek in zwei Dateien.

  • Money.R: die Klasse Money (Slots amount, currency) mit einer Gültigkeitsregel currency must be 3 capital letters (prüfe dies mit grepl("^[A-Z]{3}$", ...)); eine show()-Methode, die 12.50 EUR und eine neue Zeile ausgibt; + für zwei Money-Objekte, die mit cannot add EUR and USD abbricht (verwende call. = FALSE); sowie Arith für Money und eine Zahl mit callGeneric().
  • Convert.R: das generische convert(m, to, rates) mit einer Methode für signature("Money", "character"), die anhand der Wechselkurse umrechnet. Diese geben an, wie viele Einheiten jeder Währung 1 EUR entsprechen: 11 USD sind 10 EUR.

Der bereitgestellte Code verwaltet ein Wallet und liest die Befehle add 10 EUR, sum (addiert das gesamte Wallet), convert 2 USD (das zweite Element) oder double 1 ein und gibt jedes Ergebnis oder error: und die Meldung aus.

Dein Code gehört in Money.R und Convert.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

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

# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
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 = ""))
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler