Повторение — коды купонов
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 16 из 57.
Задание
СреднеЗавершите класс Coupon. Фабрика Coupon.parse(code) принимает SAVE, за которым следует процент (SAVE10), или OFF, за которым следует сумма (OFF5), и возвращает nil для любого другого кода. Проценты, превышающие константу MAX_PERCENT (50), сокращаются до 50. Каждый купон, создаваемый фабрикой, учитывается в переменной экземпляра класса, доступной для чтения как Coupon.issued; сделайте new приватным. apply(total) возвращает общую сумму со скидкой, которая никогда не бывает меньше 0, а to_s возвращает SAVE10 (10% off) или OFF5 (5.00 off).
Предоставленный код считывает общую сумму заказа из первой строки, а затем по одному коду в каждой последующей строке. Он выводит SAVE10 (10% off): 90.00 или invalid code HELLO, а в конце — issued: 2.
Ваш код должен находиться в coupon.rb. В main.rb содержится предоставленный код ввода/вывода, и его нельзя изменять.
Попробуйте сами
require_relative 'coupon'
# Предоставленный код ввода/вывода: оставьте его как есть
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}"
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby