Konstanta
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 14 dari 57.
Sebuah konstanta diawali dengan huruf kapital dan, sesuai konvensi, ditulis dengan huruf kapital. Jika didefinisikan di dalam isi class, konstanta dapat digunakan berdasarkan namanya di setiap method class tersebut. Di luar class, kamu menulis ClassName::NAME:
class Account
MIN_BALANCE = -100
def self.allowed?(balance)
balance >= MIN_BALANCE
end
end
puts Account::MIN_BALANCE
puts Account.allowed?(-50)
puts Account.allowed?(-150)Output:
-100
true
falseKonstanta cocok untuk data tetap yang digunakan seluruh class, seperti batas atau tabel lookup. fetch pada konstanta hash memunculkan KeyError untuk key yang tidak dikenal, alih-alih diam-diam mengembalikan nil:
class Shipping
RATES = { "standard" => 5, "express" => 12 }.freeze
def self.cost(method)
RATES.fetch(method)
end
end
puts Shipping.cost("express")
begin
Shipping.cost("drone")
rescue KeyError => e
puts e.message
endOutput:
12
key not found: "drone"Nama konstanta tidak dapat diarahkan ke object baru tanpa Ruby menampilkan peringatan, tetapi object yang ditampungnya masih dapat diubah. freeze membuat object itu sendiri hanya dapat dibaca, sehingga perubahan akan memunculkan FrozenError:
class Palette
COLORS = ["red", "green"].freeze
end
begin
Palette::COLORS << "blue"
rescue FrozenError => e
puts e.message
end
p Palette::COLORS
p Palette::COLORS.frozen?output:
can't modify frozen Array: ["red", "green"]
["red", "green"]
truePilih berdasarkan cara nilai berperilaku. Nilai yang tidak pernah berubah termasuk dalam konstanta beku; status yang berubah saat program berjalan, seperti penghitung, termasuk dalam variabel instance class:
class Ticket
PREFIX = "TK" # tetap: sebuah konstanta
@issued = 0 # berubah: variabel instance class
def self.next_code
@issued += 1
"#{PREFIX}-#{@issued}"
end
endTantangan
MudahLengkapi class Order. Class ini memiliki konstanta RATES (hash yang dibekukan: standard berharga 5, express 12, pickup 0) dan FREE_FROM (50). initialize(total, method) memunculkan ArgumentError dengan unknown shipping: drone ketika method bukan kunci dalam RATES. shipping mengembalikan 0 untuk total mulai dari FREE_FROM ke atas, dan tarifnya jika tidak. to_s mengembalikan 40.00 + 5 express = 45.00.
Kode yang disediakan mencetak free from 50 menggunakan konstanta tersebut, lalu membaca pesanan dalam baris berformat total method dan mencetak setiap pesanan atau pesan error.
Tulis kodemu di order.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'order'
# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
input << line.chomp
end
puts "free from #{Order::FREE_FROM}"
input.each do |line|
total, method = line.split
begin
puts Order.new(total.to_f, method)
rescue ArgumentError => e
puts e.message
end
end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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