Projektowanie, Programowanie, Codzienność – BeniaminZaborski.com

1 Marzec 2014

Poszukiwacze kamieni szlachetnych – wszystko jest obiektem

Filed under: Poszukiwacze kamieni szlachetnych — Tags: , , — Beniamin Zaborski @ 17:48

Ruby to język obiektowy, bardzo obiektowy:). Ruby jest tak bardzo obiektowy, że dosłownie wszystko tutaj jest obiektem, nawet liczba 1. Przyjrzyjmy się temu bliżej. Skoro 1 jest obiektem to można przypuszczać, że posiada jakieś metody. A i owszem. Nasza jedynka potrafi nawet nam powiedzieć jakie posiada metody. Spróbujmy czegoś takiego (najlepiej w IRB):

1.methods

Otrzymamy listę wszystkich metod naszego obiektu. methods to nic innego jak metoda, która zwraca listę dostępnych metod na obiekcie. Tak wygląda wywołanie metody bez parametrów w Ruby.

Na liście metod możemy znaleźć np. metodę o nazwie equal?. Ten znak zapytania może wygląda nieco dziwnie dla programisty C#, ale to tylko część nazwy metody. Taka jest konwencja nazewnicza dla metod zwracających wartość typu logicznego true/false. Wywołajmy zatem tą metodę z parametrem:

1.equal?(1)

W rezultacie dostaniemy true. Jest OK, lecimy dalej.

Może się zastanawiacie czemu nazwy metod są poprzedzone znakiem „:” ? Nie zastanawiajcie się i na razie przyjmijmy dla uproszczenia że tak musi być (dla ciekawskich rzucam hasło symbole).

Na liście metod zwróconych przez metodę methods zapewne zauważyliście kilka dziwnie wyglądających i może nie do końca tam pasujących, np. +, -, [], itp. Wszystko jest OK. Ruby to język bardzo obiektowy, pamiętacie? „+” to metoda realizująca dodawanie. Użyjmy jej:

1.+(2)

Na pierwszy rzut oka (dla programisty C#) wygląda dziwacznie, ale „+” to tylko specyficzna nazwa metody, równie dobra jak add.

Dzięki cukrowi syntaktycznemu można powyższe zapisać także następująco:

1+2

Dotyczy to nie tylko metody „+”, ale także kilku innych.

Ciągi znaków w Ruby to także obiekty. Zdefiniować je możemy na kilka sposobów, np.:

"Z Ruby jest przednia zabawa"
'Z Ruby jest przednia zabawa'

Obie powyższe instrukcje spowodują utworzenie obiektu string. Jest jednak między nimi pewna różnica. Ogólnie można powiedzieć, że wersja z apostrofami jest nieco uboższa, tj. nie obsługuje escape-owania i interpolacji. W wersji z cudzysłowami możemy zatem zrobić tak:

name = 'Jan'
"Cześć #{name}"

Jak to wygląda w C#? C# to także język obiektowy, ale np. typ int (będący referencją do System.Int32) jest de facto strukturą, która nie posiada tylu metod co klasy Fixnum czy Integer w Ruby. Listę metod dostępną dla danego obiektu można w C# pobrać za pomocą mechanizmu refleksji, a typ string w C# także jest obiektem jak w Ruby.

Oczywiście C# nie jest wcale „gorszym” językiem programowania, gdyż wszystko to co w Ruby da się zrealizować w C# tylko po prostu czasami trochę inaczej. Jeśli miałbym to jakoś podsumować, to chyba nie rozminę się zbytnio z prawdą jak powiem że Ruby koncepcyjnie jest nieco „bardziej obiektowy” niż C#.

Dodaj komentarz »

Brak komentarzy.

RSS feed for comments on this post. TrackBack URI

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

Stwórz darmową stronę albo bloga na WordPress.com.

%d bloggers like this: