مراجعة - آلة البيع
جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 21 من 57.
التحدي
متوسطأنشئ آلة بيع باستخدام فئات الأخطاء UnknownProduct وSoldOut وNotEnoughCredit، وجميعها فئات فرعية من StandardError. تستقبل VendingMachine.new(stock) تجزئةً بالشكل { "cola" => [150, 2] } (السعر بالسنتات، والعدد). يمكن قراءة credit، ولكن لا يمكن تعيينه إلا من خلال مُعيّن خاص. تضيف 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
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتمتغيرات النسخةالأساليب و selfto_s و inspectمراجعة - بطاقة المكتبة7تعدد الأشكال والكتابة بأسلوب البطة
تعدد الأشكالالكتابة بأسلوب البطةالأساليب المجردةالحالات والفئاتمراجعة - طرق الدفع3أساليب ومتغيرات الأصناف
أساليب الأصنافمتغيرات كائنات الأصنافالثوابتأساليب الإنشاءمراجعة - رموز القسائمتدرّب بنفسك: مترجم Ruby عبر الإنترنت