Ruby/Zmienne klasowe
Z Wikibooks, biblioteki wolnych podręczników.
[edytuj] Zmienne klasowe
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 @@populacja 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. Metoda klasowa może być wywołana jedynie na rzecz klasy, nie na rzecz obiektu. W naszym przykładzie równoważną metodą, ale nie klasową, jest metoda populacja. Obie zwracają wartość naszej zmiennej klasowej.