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, bu nedenle kendine ait örnek değişkenleri olabilir. @issued = 0 sınıf gövdesinde yer alır; burada self sınıftır ve bu değişken herhangi bir örneğe değil, sınıfa aittir. Sınıf metotları bu değişkeni 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ı:
2attr_accessor, class << self içinde sınıf üzerinde bir okuyucu ve setter oluşturur. Örnekler daha sonra sınıfın durumuna self.class üzerinden ulaşır; örneğin new tarafından oluşturulan her nesneyi saymak için:
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 ayrıca sınıf değişkenlerine de sahiptir; 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 yöntemleri 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
1Bir sınıf değişkeni her alt sınıf ile de paylaşılır (başka bir sınıf üzerine oluşturulan sınıf, bölüm 5); bu nedenle onu atayan bir alt sınıf, üst sınıf için de değiştirir. Bir sınıf örneği değişkeni her sınıf için ayrı kalır; bu nedenle çoğu Ruby kodu onu 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 bir sonraki numarayı alır. Ticket.issued, son sıfırlamadan bu yana kaç bilet verildiğini döndürür; Ticket.reset ise sayacı tekrar 0’a ayarlar. to_s, #3 Concert değerini 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 kod bu etkinlik için bir bilet oluşturup bileti yazdırır. Sonunda issued: 2 yazdırır.
Kodun ticket.rb dosyasına yazılmalıdır. 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