Récapitulatif - Argent et devise
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 31 sur 57.
Défi
MoyenConstruisez une petite bibliothèque monétaire dans deux fichiers.
Money.R: la classeMoney(emplacementsamount,currency) avec une règle de validitécurrency must be 3 capital letters(vérifiez avecgrepl("^[A-Z]{3}$", ...)) ; une méthodeshow()affichant12.50 EURet une nouvelle ligne ;+pour deux objetsMoney, qui s'arrête aveccannot add EUR and USD(utilisezcall. = FALSE) ; etArithpourMoneyet un nombre aveccallGeneric().Convert.R: le génériqueconvert(m, to, rates)avec une méthode poursignature("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
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnel6S4 Génériques et méthodes
Création de génériquesMéthodes pour les fonctions intégréesDispatch sur deux argumentssetValidity et validObjectRécapitulatif - Argent et deviseEntraînez-vous par vous-même : Compilateur R en ligne