Revisão - Dinheiro e Moeda
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 31 de 57.
Desafio
MédioCrie uma pequena biblioteca monetária em dois arquivos.
Money.R: a classeMoney(slotsamount,currency) com uma regra de validadecurrency must be 3 capital letters(verifique comgrepl("^[A-Z]{3}$", ...)); um métodoshow()que imprime12.50 EURe uma nova linha;+para dois objetosMoneyque interrompe a execução comcannot add EUR and USD(usecall. = FALSE); eArithparaMoneye um número comcallGeneric().Convert.R: o genéricoconvert(m, to, rates)com um método parasignature("Money", "character")que converte usando as taxas, que informam quantas unidades de cada moeda equivalem a 1 EUR: 11 USD equivalem a 10 EUR.
O código fornecido mantém uma carteira e lê os comandos add 10 EUR, sum (adiciona a carteira inteira), convert 2 USD (o segundo item) ou double 1, imprimindo cada resultado ou error: e a mensagem.
Seu código deve estar em Money.R e Convert.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Money.R")
source("Convert.R")
# Código de entrada/saída fornecido: mantenha-o como está
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 = ""))
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de Livros3Herança S3
Vetores de classeOrdem de busca de métodosEstendendo com NextMethodVerificando com inherits()Revisão - Folha de pagamento da equipe6S4 Genéricos e Métodos
Criando GenéricosMétodos para Objetos IntegradosDespacho em Dois ArgumentossetValidity e validObjectRevisão - Dinheiro e MoedaPratique por conta própria: Compilador de R online