Rückblick – Geld und Währung
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 31 von 57.
Aufgabe
MittelErstelle eine kleine Geldbibliothek in zwei Dateien.
Money.R: die KlasseMoney(Slotsamount,currency) mit einer Gültigkeitsregelcurrency must be 3 capital letters(prüfe dies mitgrepl("^[A-Z]{3}$", ...)); eineshow()-Methode, die12.50 EURund eine neue Zeile ausgibt;+für zweiMoney-Objekte, die mitcannot add EUR and USDabbricht (verwendecall. = FALSE); sowieArithfürMoneyund eine Zahl mitcallGeneric().Convert.R: das generischeconvert(m, to, rates)mit einer Methode fürsignature("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
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihen3S3-Vererbung
KlassenvektorenReihenfolge der MethodensucheErweitern mit NextMethodPrüfen mit inherits()Rückblick – Mitarbeiterabrechnung6S4 Generics und Methoden
Generics erstellenMethoden für eingebaute FunktionenDispatch für zwei ArgumentesetValidity und validObjectRückblick – Geld und WährungÜbe selbstständig: Online-R-Compiler