Podsumowanie – kody kuponów
Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 16 z 57.
Wyzwanie
ŚredniUzupełnij klasę Coupon. Fabryka Coupon.parse(code) przyjmuje SAVE, po którym następuje wartość procentowa (SAVE10), albo OFF, po którym następuje kwota (OFF5), i zwraca nil dla każdego innego kodu. Wartości procentowe przekraczające stałą MAX_PERCENT (50) są obniżane do 50. Każdy kupon utworzony przez fabrykę jest zliczany w zmiennej instancji klasy, dostępnej do odczytu jako Coupon.issued; ustaw new jako prywatne. apply(total) zwraca sumę po obniżce, nie mniejszą niż 0, a to_s zwraca SAVE10 (10% off) lub OFF5 (5.00 off).
Dostarczony kod odczytuje łączną kwotę zamówienia z pierwszego wiersza, a następnie jeden kod z każdego kolejnego wiersza. Wypisuje SAVE10 (10% off): 90.00 lub invalid code HELLO, a na końcu issued: 2.
Twój kod umieść w coupon.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
require_relative 'coupon'
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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}"
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Metody i zmienne klasowe
Metody klasoweZmienne instancji klasyStałeMetody fabrykującePodsumowanie – kody kuponówPoćwicz samodzielnie: Kompilator Ruby online