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

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 91:
|}
 
Wyciągnijmy korzyściKorzystając z tej tabeli i dodajmy informację na temat świeżości. Najpierw poprosimy o automatycznie wygenerowanewygenerujemy akcesory: czytający i piszący, a następnie dodajmydodamy nową informację do metody <tt>inspect</tt>:
 
<pre>
ruby> class FruitOwoc
| attr_accessor :conditionkondycja
| def inspect
| "a #{@conditionstan} #{@kindrodzaj}"
| end
| end
nil
ruby> f2.conditionstan = "ripedojrzaly"
"ripedojrzaly"
ruby> f2
"adojrzaly ripe bananabanan"
</pre>
 
=== Więcej zabawy z owocem ===
 
Jeżeli nikt nie zjadł naszego dojrzałego (ang. ''ripe'') owocu, być może powinniśmynależałoby pozwolić, by czas zebrał swoje żniwo.
 
<pre>
ruby> class FruitOwoc
| def time_passesuplywa_czas
| @conditionstan = "rottinggnijacy"
| end
| end
nil
ruby> f2
"adojrzaly ripe bananabanan"
ruby> f2.time_passesuplywa_czas
"rottinggnijacy"
ruby> f2
"agnijacy rotting bananabanan"
</pre>
 
Ale bawiąc się tak,nieopatrznie wprowadziliśmy mały problem. Co się stanie jeśli spróbujemy teraz utworzyć trzeci owoc. Pamiętaj, że zmienne instancji nie istnieją dopóki nie zostaną im przypisane wartości.
 
<pre>
ruby> f3 = FruitOwoc.new
ERR: failed to convert nil into String
</pre>
 
To skarży się metoda <tt>inspect</tt> się tu skarży i ma dobry powód. Miała przecież raportować rodzaj owocu oraz jego kondycjęstan, ale jak dotąd ani jednemu atrybutowi <tt>f3</tt> nie została przypisana żadna wartość. Jeśli chcielibyśmy, możnaMożna by przepisać metodę <tt>inspect</tt>, tak by sprawdałasprawdzała zmienne instancji używając <tt>defined?</tt> i tylko wtedy zwracała wartości tylko wtedy, gdy one istnieją, ale to nie jest zbyt użyteczne. Odkąd każdy owoc ma własny rodzaj i kondycjęstan, wydaje się, że musimy upewnićupewniać się, że zawsze mamy je zawsze jakoś zdefiniowane. To właśnie będzie tematem następnego rozdziału.
<noinclude>
{{Przypisy}}