Menu
CoddyTech

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ı:

2

class << 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 2

Ruby'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
1

Sı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
child
challenge icon

Görev

Kolay

Ticket 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}"
quiz iconKendini test et

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

Kendi başına pratik yap: Online Ruby derleyicisi