סיכום – מכונת ממכר
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Ruby של Coddy. שיעור 21 מתוך 57.
אתגר
בינוניבנו מכונת ממכר עם מחלקות שגיאה UnknownProduct, SoldOut ו-NotEnoughCredit, שכולן תת-מחלקות של StandardError. VendingMachine.new(stock) מקבלת hash { "cola" => [150, 2] } (מחיר בסנטים, כמות). ניתן לקרוא את credit, אך אפשר לקבוע את ערכו רק באמצעות setter פרטי. insert(cents) מוסיפה קרדיט. buy(name) מעלה את UnknownProduct (no such product: tea), את SoldOut (cola is sold out) או את NotEnoughCredit (cola costs 1.50, credit 1.00), לפי הסדר הזה; אחרת היא מוציאה פריט אחד מהמלאי, מפחיתה את המחיר ומחזירה את השם. refund מחזירה את הקרדיט ומאפסת אותו ל-0. פונקציית עזר פרטית money(cents) מעצבת את 1.50.
הקוד שסופק קורא את המלאי מהשורה הראשונה (cola:150:2,chips:90:1), ואז פקודות insert n, buy name או refund. הוא מדפיס credit 2.00, bought cola, refund 0.50 או את הודעת השגיאה, ולבסוף מנסה להגדיר את credit מבחוץ, ומדפיס credit is protected.
הקוד שלך צריך להופיע בקבצים unknown_product.rb, sold_out.rb, not_enough_credit.rb ו-vending_machine.rb. הקובץ main.rb מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
require_relative 'unknown_product'
require_relative 'sold_out'
require_relative 'not_enough_credit'
require_relative 'vending_machine'
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input = []
while (line = gets)
input << line.chomp
end
stock = input[0].split(",").to_h do |entry|
name, price, count = entry.split(":")
[name, [price.to_i, count.to_i]]
end
machine = VendingMachine.new(stock)
input.drop(1).each do |line|
command, arg = line.split
begin
case command
when "insert"
machine.insert(arg.to_i)
puts format("credit %.2f", machine.credit / 100.0)
when "buy"
puts "bought #{machine.buy(arg)}"
else
puts format("refund %.2f", machine.refund / 100.0)
end
rescue UnknownProduct, SoldOut, NotEnoughCredit => e
puts e.message
end
end
begin
machine.credit = 500
puts "credit changed"
rescue NoMethodError
puts "credit is protected"
end
כל השיעורים ביחידה תכנות מונחה עצמים
3מתודות ומשתנים של מחלקה
מתודות של מחלקהמשתני מופע של מחלקהקבועיםמתודות ליצירת מופעיםסיכום – קודי קופוןתרגלו בעצמכם: קומפיילר Ruby אונליין