Utwórzmy teraz obiekt klasy Greeter:
Gdy obiekt g
jest utworzony, zapamiętuje on imię jako Pat. Hmm, co
jeśli chcielibyśmy dostać się bezpośrednio do imienia ?
Niestety, nie możemy tak zrobić.
Pod Skórą Obiektu
Zmienne instancji są ukryte wewnątrz obiektu. Nie są ukryte jakoś bardzo głęboko, zobaczysz je kiedy zbadasz bliżej obiekt. Isnieją inne metody dostępu do zmiennych instancji, ale Ruby używa sprawdzonego, obiektowego podejścia “trzymania danych w pewien sposób ukrytych”.
Więc jakie to metody istnieją dla obiektów klasy Greeter?
Dużo metod. My zdefiniowaliśmy tylko dwie metody. Co tutaj się dzieje?
No coż, to są wszystkie metody obiektów klas Greeter, kompletna
lista, wliczając w to metody zdefiniowane w klasach nadrzędnych. Jeśli
chcemy wyświetlić tylko metody zdefiniowane w klasie Greeter, możemy
wskazać, że nie chcemy wyświetlać metod zdefiniowanych w klasach
nadrzędnych poprzez przekazanie parametru false
.
Zobaczmy więc, na jakie metody nasz obiekt odpowiada (responds_to):
Rozumie więc say_hi
, oraz to_s
(oznaczającą zamienienie czegoś w
stringa, metoda która jest zdefiniowana domyślnie dla każdego obiektu),
ale nie wie nic o metodzie name
.
Zmienianie Klas—Na To Nigdy Nie Jest Za Późno
Co jeśli chielibyśmy wyświetlić albo zmienić imię (name)? Ruby zapewnia nam łatwy dostępn do zmiennych obiektu.
W Rubim możesz ponownie otworzyć klasę i zmodyfikować ją. To nie zmienia
żadnych obiektów, które juz isnieją, ale zmienia obiekty, które dopiero
powstaną. Utwórzmy więc nowy obiekt i pobawmy się jego właściwością
@name
.
Użycie attr_accessor
zdefiniowało dwie nowe metody dla nas, name
aby
odczytać wartość oraz name=
aby ją ustawić.
Witanie Wszystkiego, MegaGreeter Nie Opuszcza Niczego!
Nasz witający obiekt nie jest bardzo interesujący, może on zajmować się tylko jedną osobą naraz. Co jeśli mielibyśmy pewien rodzaj MegaGreeter’a, który mógłby witać albo cały świat, jedną osobę albo całą listę osób ?
Napiszmy go tym razem w pliku a nie w interaktywnej konsoli IRB’a.
Aby wyjść z IRB’a wpisz “quit”, “exit” albo po prostu naciśnij Control-D.
Zapisz ten plik pod nazwą “ri20min.rb”, i uruchom go wpisując “ruby ri20min.rb”. Wynik poniżej:
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come
back soon!
...
...
W powyższym przykładzie jest sporo nowych rzeczy, którym możemy się bliżej przyjrzeć.