Menu
Coddy logo textTech

Récapitulatif - Argent et devise

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 31 sur 57.

challenge icon

Défi

Moyen

Construisez une petite bibliothèque monétaire dans deux fichiers.

  • Money.R : la classe Money (emplacements amount, currency) avec une règle de validité currency must be 3 capital letters (vérifiez avec grepl("^[A-Z]{3}$", ...)) ; une méthode show() affichant 12.50 EUR et une nouvelle ligne ; + pour deux objets Money, qui s'arrête avec cannot add EUR and USD (utilisez call. = FALSE) ; et Arith pour Money et un nombre avec callGeneric().
  • Convert.R : le générique convert(m, to, rates) avec une méthode pour signature("Money", "character") qui convertit selon les taux, lesquels indiquent combien d'unités de chaque devise valent 1 EUR : 11 USD valent 10 EUR.

Le code fourni conserve un portefeuille et lit les commandes add 10 EUR, sum (additionne tout le portefeuille), convert 2 USD (le deuxième élément) ou double 1, en affichant chaque résultat ou error: suivi du message.

Votre code va dans Money.R et Convert.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le garder tel quel
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 = ""))
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne