Ulasan, Mesin Penjual Otomatis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 21 dari 57.
Tantangan
SedangBuat mesin penjual otomatis dengan class error UnknownProduct, SoldOut dan NotEnoughCredit, semuanya merupakan subclass StandardError. VendingMachine.new(stock) menerima hash { "cola" => [150, 2] } (harga dalam sen, jumlah). credit bisa dibaca, tetapi hanya dapat diatur melalui setter private. insert(cents) menambahkan kredit. buy(name) memunculkan UnknownProduct (no such product: tea), SoldOut (cola is sold out) atau NotEnoughCredit (cola costs 1.50, credit 1.00) sesuai urutan tersebut. Jika tidak, fungsi ini mengambil satu barang dari stok, mengurangi harga dan mengembalikan namanya. refund mengembalikan kredit dan mengaturnya ke 0. Helper private money(cents) memformat 1.50.
Kode yang disediakan membaca stok dari baris pertama (cola:150:2,chips:90:1), lalu perintah insert n, buy name atau refund. Kode ini mencetak credit 2.00, bought cola, refund 0.50 atau pesan error, lalu mencoba mengatur credit dari luar, dan mencetak credit is protected.
Kodemu ditulis di unknown_product.rb, sold_out.rb, not_enough_credit.rb dan vending_machine.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'unknown_product'
require_relative 'sold_out'
require_relative 'not_enough_credit'
require_relative 'vending_machine'
# Kode input/output yang disediakan: biarkan apa adanya
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
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online