Revisão - Códigos de Cupom
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 16 de 57.
Desafio
MédioComplete a classe Coupon. A fábrica Coupon.parse(code) aceita SAVE seguido por uma porcentagem (SAVE10) ou OFF seguido por um valor (OFF5) e retorna nil para qualquer outro código. Porcentagens acima da constante MAX_PERCENT (50) são reduzidas para 50. Todo cupom que a fábrica cria é contabilizado em uma variável de instância da classe, que pode ser lida como Coupon.issued; torne new privado. apply(total) retorna o total com desconto, nunca menor que 0, e to_s retorna SAVE10 (10% off) ou OFF5 (5.00 off).
O código fornecido lê o total do pedido da primeira linha e um código por linha seguinte. Ele imprime SAVE10 (10% off): 90.00 ou invalid code HELLO e, por fim, issued: 2.
Seu código deve ficar em coupon.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'coupon'
# Código de entrada/saída fornecido: mantenha-o como está
input = []
while (line = gets)
input << line.chomp
end
total = input[0].to_f
input.drop(1).each do |code|
coupon = Coupon.parse(code)
if coupon
puts format("%s: %.2f", coupon, coupon.apply(total))
else
puts "invalid code #{code}"
end
end
puts "issued: #{Coupon.issued}"
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de Livros3Métodos e Variáveis de Classe
Métodos de ClasseVariáveis de Instância da ClasseConstantesMétodos de FábricaRevisão - Códigos de CupomPratique por conta própria: Compilador de Ruby online