Sınıf Örnek Değişkenleri
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 57.
Bir sınıf da bir nesnedir, dolayısıyla kendi örnek değişkenlerine sahip olabilir. Sınıf gövdesindeki @issued = 0, burada self sınıfı ifade eder, sınıfa aittir ve herhangi bir örneğe ait değildir. Sınıf metotları bu değeri okur ve değiştirir:
class Ticket
@issued = 0
def self.issue
@issued += 1
end
def self.issued
@issued
end
end
Ticket.issue
Ticket.issue
puts Ticket.issuedÇıktı:
2class << self içindeki attr_accessor, sınıfta bir okuyucu ve setter oluşturur. Örneğin, new tarafından oluşturulan her nesneyi saymak için, örnekler sınıfın durumuna self.class üzerinden erişir:
class Robot
@built = 0
class << self
attr_accessor :built
end
attr_reader :serial
def initialize
self.class.built += 1
@serial = self.class.built
end
end
a = Robot.new
b = Robot.new
puts "#{a.serial} #{b.serial} #{Robot.built}"Çıktı:
1 2 2Ruby'de ayrıca sınıf değişkenleri vardır; bunlar @@name şeklinde yazılır. Bir sınıf değişkeni, sınıf ve tüm örnekleri tarafından paylaşılır, bu nedenle örnek metotları onu doğrudan okuyabilir:
class Player
@@count = 0
def initialize
@@count += 1
end
def self.count
@@count
end
def others
@@count - 1
end
end
Player.new
last = Player.new
puts Player.count
puts last.othersÇıktı:
2
1Sınıf değişkeni her alt sınıfla (başka bir sınıf temel alınarak oluşturulan sınıf, bölüm 5) da paylaşılır; bu nedenle değişkene değer atayan bir alt sınıf, üst sınıftaki değerini de değiştirir. Sınıf örnek değişkeni her sınıf için ayrı kalır; bu yüzden çoğu Ruby kodu bunu tercih eder:
class Base
@@kind = "base"
@label = "base"
class << self
attr_reader :label
end
def self.kind
@@kind
end
end
class Child < Base
@@kind = "child"
@label = "child"
end
puts Base.kind
puts Base.label
puts Child.labelÇıktı:
child
base
childGörev
KolayTicket sınıfını tamamla. Her yeni bilet, bir sınıf örnek değişkeninde tutulan sayaçtan başlayarak 1'den itibaren sıradaki numarayı alır. Ticket.issued, son sıfırlamadan bu yana kaç bilet verildiğini döndürür ve Ticket.reset sayacı 0'a ayarlar. to_s, #3 Concert döndürür.
Sağlanan kod satırları okur. reset sayacı sıfırlar; diğer tüm satırlar bir etkinlik adıdır ve bu ad için bir bilet oluşturup ekrana yazdırır. Sonunda issued: 2 yazdırır.
Kodunu ticket.rb dosyasına yaz. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'ticket'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
input.each do |line|
if line == "reset"
Ticket.reset
else
puts Ticket.new(line)
end
end
puts "issued: #{Ticket.issued}"
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