Ruby/Zmienne klasowe
Zmienne klasowe
[edytuj]Zmienne klasowe są współdzielone przez wszystkie instancje danej klasy. W Rubim, do oznaczania zmiennych klasowych używa się prefiksu @@. W poniższym przykładzie zmienna @@ilosc odzwierciedla całkowitą ilość instancji klasy Zwierze utworzonych w czasie działania programu.
class Zwierze
@@ilosc = 0
def initialize
@@ilosc += 1
end
def self.populacja # metoda klasy
@@ilosc
end
def populacja # metoda instancji
@@ilosc
end
end
3.times do
Zwierze.new
end
puts Zwierze.populacja # => 3
pies = Zwierze.new
puts pies.populacja # => 4
@@ilosc jest zmienną klasową. W konstruktorze klasy Zwierze zwiększamy ją o jeden, czyli inkrementujemy (zmniejszanie o jeden nazywamy dekrementacją). Zapis @@ilosc += 1 jest równoważny zapisowi @@ilosc = @@ilosc + 1. Jak widzimy, każde kolejne utworzenie instancji klasy Zwierze powoduje zwiększenie o jeden zmiennej @@ilosc.
Metoda zdefiniowana jako self.populacja jest metodą klasową. Inną metodą tego rodzaju jest np. new. W naszym przykładzie równoważną metodą, ale nie klasową, jest metoda populacja. Obie zwracają wartość naszej zmiennej klasowej.