Ruby/Klasy: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 7:
Zazwyczaj, by utworzyć jakiś obiekt w Rubim lub w każdym innym języku obiektowym, najpierw należy zdefiniować pewne cechy charakterystyczne klasy, a następnie utworzyć jej instancję. By zilustrować ten przykład, zdefiniujmy prostą klasę <tt>Pies</tt>.
 
<source lang="ruby">
<pre>
ruby> class Pies
| def szczekaj
| puts "Hau hau"
| end
| end
</source>
nil
</pre>
 
W Rubim, definicja ''klasy'' jest regionem kodu pomiędzy słowami kluczowymi <tt>class</tt> i <tt>end</tt>. Słowo kluczowe <tt>def</tt> wewnątrz tego regionu rozpoczyna definicję ''metody'' danej klasy, która, jak omówiliśmy w [[Ruby/Metody|poprzednim rozdziale]], odpowiada pewnemu specyficznemu zachowaniu obiektów tej klasy.
Linia 20 ⟶ 19:
Teraz, jak już zdefiniowaliśmy klasę <tt>Pies</tt> możemy użyć jej do utworzenia psa:
 
<source lang="ruby">
<pre>
ruby> burek = Pies.new
</source>
#<Pies:0xbcb90>
</pre>
 
Utworzyliśmy nową instancję klasy <tt>Pies</tt> i nazwaliśmy ją <tt>burek</tt>. Metoda <tt>new</tt> jakiejkolwiek klasy tworzy nową instancję. Ponieważ <tt>burek</tt> jest psem (<tt>Pies</tt>) zgodnie z definicją naszej klasy, ma on wszelkie własności, które (jak zdecydowaliśmy) pies powinien posiadać. Ale ponieważ nasza idea "pieskości" była bardzo prosta, jest tylko jedna sztuczka, o którą możemy poprosić naszego psa <tt>burek</tt>.
 
<source lang="ruby">
<pre>
ruby> burek.szczekaj #=> Hau hau
</source>
Hau hau
nil
</pre>
 
Tworzenie nowej instancji jest czasem zwane ''instancjonowaniem'' klasy. Potrzebujemy mieć jakiegoś psa nim będziemy mogli doświadczyć przyjemności rozmowy z nim. Nie możemy po prostu poprosić klasy <tt>Pies</tt> by dla nas szczekała.
 
<source lang="ruby">
<pre>
ruby> Pies.szczekaj
ERR: (eval):1: undefined method `szczekaj' for Pies:class
</presource>
 
Ma to tyle sensu, co ''próba zjedzenia koncepcji kanapki''.
 
=== Obiekty anonimowe ===
 
Z drugiej strony, jeśli chcemy usłyszeć dźwięk psa bez większego zaangażowania emocjonalnego, możemy utworzyć (instancjonować) efemerycznego, tymczasowego psa, i namówić go do wydania małego odgłosu nim zniknie.
 
<source lang="ruby">
<pre>
ruby> (Pies.new).szczekaj # lub bardziej powszechnie: Pies.new.szczekaj
#=> Hau hau
</source>
nil
</pre>
 
"Zaraz", powiesz, "o co chodzi z tym biednym kolegą, co zniknie za chwilę?" To prawda. Jeżeli nie dbasz o to, by dać mu imię (tak jak daliśmy imię psu <tt>burek</tt>), automatyczne odśmiecanie Rubiego zdecyduje, że jest to niechciany, bezpański pies, i bezlitośnie się go pozbędzie. Tak naprawdę to nic strasznego, ponieważ, jak wiesz, możemy utworzyć wszystkie psy, które tylko chcemy.