Podsumowanie — pieniądze i waluta
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 31 z 57.
Wyzwanie
ŚredniZbuduj małą bibliotekę do obsługi pieniędzy w dwóch plikach.
Money.R: klasaMoney(slotyamount,currency) z regułą poprawnościcurrency must be 3 capital letters(sprawdź za pomocągrepl("^[A-Z]{3}$", ...)); metodashow()wypisująca12.50 EURi znak nowej linii; operator+dla dwóch obiektówMoney, który zgłasza błądcannot add EUR and USD(użyjcall. = FALSE); orazArithdla obiektuMoneyi liczby, używającycallGeneric().Convert.R: funkcja generycznaconvert(m, to, rates)z metodą dlasignature("Money", "character"), która przelicza walutę za pomocą kursów określających, ile jednostek każdej waluty odpowiada 1 EUR: 11 USD to 10 EUR.
Dostarczony kod przechowuje portfel i odczytuje polecenia add 10 EUR, sum (sumuje cały portfel), convert 2 USD (drugi element) lub double 1, wypisując każdy wynik albo error: i komunikat.
Umieść swój kod w plikach Money.R i Convert.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
source("Money.R")
source("Convert.R")
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = ""))
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracowników6S4: Funkcje generyczne i metody
Tworzenie funkcji generycznychMetody dla typów wbudowanychWybór metody na podstawie dwóch argumentówsetValidity i validObjectPodsumowanie — pieniądze i walutaPoćwicz samodzielnie: Kompilator R online