Ruby/Zmienne klasowe: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 1:
== Zmienne klasowe ==
 
Zmienne ''klasowe'' są współdzielone przez wszystkie instancje danej klasy. W Rubim, do oznaczania zmiennych klasowych używa się prefiksu <tt>@@</tt>. W poniższym przykładzie zmienna <tt>@@iloscpopulacja</tt> odzwierciedla całkowitą ilość instancji klasy <tt>TestZwierze</tt> utworzonych w czasie działania programu.
 
<source lang="ruby">
<pre>
class TestZwierze
@@ilosc = 0
Linia 11:
end
def self.ile_instancjipopulacja # metoda klasy
@@ilosc
end
def populacja # metoda instancji
def ile
@@ilosc
end
Linia 21:
 
3.times do
TestZwierze.new
end
 
puts TestZwierze.ile_instancjipopulacja # => 3
tpies = TestZwierze.new
puts tpies.ile populacja # => 4
</presource>
 
<tt>@@ilosc</tt> jest zmienną klasową. W konstruktorze klasy <tt>TestZwierze</tt> zwiększamy ją o jeden, czyli ''inkrementujemy'' (zmniejszanie o jeden nazywamy ''dekrementacją''). Zapis <tt>@@ilosc += 1<tt> jest równoważny zapisowi <tt>@@ilosc = @@ilosc + 1</tt>. Jak widzimy, każde kolejne utworzenie instancji klasy <tt>Zwierze</tt> powoduje zwiększenie o jeden zmiennej <tt>@@ilosc</tt>.
 
Metoda zdefiniowana jako <tt>self.ile_instancji</tt> jest ''metodą klasową''. Inną metodą tego rodzaju np. <tt>new</tt>. 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 <tt>ile</tt>. Obie zwracają wartość naszej zmiennej klasowej. Wynik działania instrukcji <tt>puts</tt> oznaczyliśmy za pomocą komentarzy (<tt># => ...</tt>). Jak widzimy, każde kolejne utworzenie instancji klasy <tt>Test</tt> powoduje zwiększenie o jeden zmiennej <tt>@@ilosc</tt>.
 
Metoda zdefiniowana jako <tt>self.ile_instancjipopulacja</tt> jest ''metodą klasową''. Inną metodą tego rodzaju jest np. <tt>new</tt>. 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 <tt>ilepopulacja</tt>. Obie zwracają wartość naszej zmiennej klasowej. Wynik działania instrukcji <tt>puts</tt> oznaczyliśmy za pomocą komentarzy (<tt># => ...</tt>). Jak widzimy, każde kolejne utworzenie instancji klasy <tt>Test</tt> powoduje zwiększenie o jeden zmiennej <tt>@@ilosc</tt>.
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Zmienne globalne|poprz=Zmienne globalne|nastart=Ruby/Zmienne instancji|nast=Zmienne instancji}}