Repaso: códigos de cupón
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 16 de 57.
Desafío
IntermedioCompleta la clase Coupon. La fábrica Coupon.parse(code) acepta SAVE seguido de un porcentaje (SAVE10) o OFF seguido de un importe (OFF5) y devuelve nil para cualquier otro código. Los porcentajes superiores a la constante MAX_PERCENT (50) se reducen a 50. Cada cupón que crea la fábrica se cuenta en una variable de instancia de clase, legible como Coupon.issued; haz que new sea privado. apply(total) devuelve el total con descuento, nunca inferior a 0, y to_s devuelve SAVE10 (10% off) u OFF5 (5.00 off).
El código proporcionado lee el total del pedido de la primera línea y un código por cada línea posterior. Imprime SAVE10 (10% off): 90.00 o invalid code HELLO, y finalmente issued: 2.
Tu código debe ir en coupon.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
require_relative 'coupon'
# Código de entrada/salida suministrado: déjalo tal 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 las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de libros3Métodos y variables de clase
Métodos de claseVariables de instancia de claseConstantesMétodos de fábricaRepaso: códigos de cupónPractica por tu cuenta: Compilador de Ruby online