Sabitler
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 14 / 57.
Bir sabit büyük harfle başlar ve geleneksel olarak büyük harflerle yazılır. Bir sınıf gövdesinde tanımlandığında, sınıfın her metodunda adıyla kullanılabilir. Sınıfın dışında ClassName::NAME şeklinde yazılır:
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)Çıktı:
-100
true
falseSabitler, sınırlar veya arama tabloları gibi, sınıfın tamamının kullandığı sabit veriler için uygundur. Bir hash sabiti üzerinde fetch kullanıldığında, bilinmeyen bir anahtar için sessizce nil döndürmek yerine KeyError hatası oluşur:
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
endÇıktı:
12
key not found: "drone"Sabit bir ad, Ruby bir uyarı yazdırmadan yeni bir nesneyi gösteremez; ancak tuttuğu nesne yine de değiştirilebilir. freeze nesnenin kendisini salt okunur yapar, bu nedenle bir değişiklik FrozenError hatasına yol açar:
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?Çıktı:
can't modify frozen Array: ["red", "green"]
["red", "green"]
trueDeğerin nasıl davrandığına göre seçim yap. Hiç değişmeyen bir değer dondurulmuş bir sabitte yer alır; program çalışırken değişen sayaç gibi durumlar ise bir sınıf örnek değişkeninde yer alır:
class Ticket
PREFIX = "TK" # sabit: bir sabit
@issued = 0 # değişir: sınıf örneği değişkeni
def self.next_code
@issued += 1
"#{PREFIX}-#{@issued}"
end
endGörev
KolayOrder sınıfını tamamlayın. Bu sınıfta RATES sabiti (dondurulmuş bir hash: standard 5, express 12, pickup 0 tutarındadır) ve FREE_FROM sabiti (50) bulunur. Yöntem, RATES anahtarlarından biri değilse initialize(total, method), unknown shipping: drone ile birlikte ArgumentError hatası verir. shipping, toplam FREE_FROM değerine eşit veya daha yüksek olduğunda 0, aksi hâlde ilgili ücreti döndürür; to_s ise 40.00 + 5 express = 45.00 döndürür.
Sağlanan kod, sabiti kullanarak free from 50 çıktısını verir; ardından siparişleri total method satırları olarak okur ve her siparişi veya hata mesajını yazdırır.
Kodunuzu order.rb dosyasına yazın. main.rb sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'order'
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
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
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi