Wprowadzenie do języka Ruby, cz. 1

Zaczynamy

Grafika

Ruby to interpretowany, dynamiczny i obiektowy język programowania stworzony w latach dziewięćdziesiątych przez Yukihiro Matsumoto (ps. matz) – programistę pochodzącego z Kraju Kwitnącej Wiśni.

Zaczynamy

Składnia i gramatyka Ruby’ego przypominają nieco Pythona, chociaż ten pierwszy jest trochę bardziej obiektowy: nawet liczby całkowite są instancjami klasy Fixnum i pełnoprawnymi obiektami. Poza tym instancja danej klasy również zachowuje się jak samodzielna klasa. Co to jest instancja i czym dokładnie jest klasa wyjaśnimy sobie później.

Pamiętamy operator wyboru składowej z C++ i innych języków (zwany też operatorem kropki)? W Rubym, dzięki wszechobecnej obiektowości, można traktować go wręcz jako łącznik komunikatów, poprzez który obiekty, będące rezultatami wykonywanych operacji, wędrują od jednej metody do drugiej.

Ruby jest nieco bardziej „śmietniskowy” niż Python, ale znacznie mniej, niż dominujący w tej kategorii Perl. Pisze się w nim przyjemnie i nie trzeba co rusz, jak to bywa w Pythonie, nadużywać słowa kluczowego self. Ludzie programujący w Rubym doceniają elegancję i przyjemność wynikającą z programowania w języku, który miejscami przypomina język naturalny. Ma to swoje dobre i złe strony.

Ruby stał się popularny dzięki środowisku Ruby on Rails (skr. RoR). Według zapewnień twórców i wielu użytkowników, można w nim szybko i przyjemnie stworzyć aplikację webową. Zawiera ono zbiór generatorów, które budują szkielety gotowych aplikacji, co znacznie ułatwia rozpoczynanie pracy, a duża społeczność i wiele gotowych komponentów sprawiają, że można naprawdę w kilkanaście minut stworzyć serwis WWW.

Programowanie obiektowe

Ruby jest językiem wieloparadygmatowym, to znaczy można w nim korzystać z różnych sposobów modelowania świata i pomagających w tym mechanizmów. Jednak dominującym paradygmatem jest programowanie obiektowe** (ang. object-oriented programming, skr. OOP).

Obiekty

Obiekty to struktury danych o zdefininowanych wcześniej polach i operacjach, które można na tych polach wykonać. Pozwalają łączyć danemetody dostępu do tych danych.

Obiekty przypominają dane typów wbudowanych – również identyfikowane są nazwami i również zajmujące określone miejsca w pamięci – chociaż o ich wewnętrznych składnikach decyduje programista, a nie producent kompilatora czy interpretera.

Klasy

Określanie pól, które będą składowymi wykorzystywanych obiektów odbywa się podczas definiowania nowych typów danych – służą do tego klasy (ang. classes). Klasa jest wzorcem, w którym wyrażamy z czego będzie składał się każdy obiekt tworzonego obiektowego typu danych i jakie operacje będzie można na nim wykonać.

Dynamiczne typizowanie

Typy danych (ang. data types) pozwalają kompilatorowi lub interpreterowi na przewidzenie jakiego rozmiaru pamięć należy zarezerwować na obsługę konkretnej zmiennej czy konkretnego egzemplarza klasy (obiektu). W językach silnie typizowanych pozwalają też na wykonywanie tylko tych operacji na danych (np. funkcji czy procedur), które zadeklarowano jako obsługujące pewne typy. W ten sposób unika się pomyłek i przyspiesza działanie programu. Ceną, jaką się za to płaci jest z kolei mała elastyczność i konieczność budowania osobnych wersji klas dla każdego typu.

Języki dynamicznie typizowane pozwalają na wykrywanie typów w trakcie działania programu (ang. runtime). Tu również mogą występować testy typów, ale dokonuje ich programista podczas tworzenia metod, umieszczając odpowiednie warunki.

Innym mechanizmem jest też tzw. kacze typizowanie (ang. duck typing). Polega ono na dynamicznym sprawdzaniu czy obiekt, który otrzymujemy (np. jako wartość argumentu wywoływanej metody) zachowuje się w określony sposób. Konkretnie oznacza to, że wyposażony jest w metody o określonych nazwach. Jeśli na przykład obiekt ma metodę ćwierkaj, to zakładamy, że jego klasą jest Ptak lub pochodna. Oczywiście nie chodzi tu o dedukcję typu danych obiektu, ale o sprawdzanie, czy obiekt jest w stanie wykonać pewną operację, a potem skorzystanie z niej.

Instalacja interpretera

Instalacja interpretera polega na pobraniu źródeł, wypakowaniu ich, wywołaniu skryptu automatycznej konfiguracji, a następnie na kompilacji i zainstalowaniu w odpowiednim katalogu. Niektóre czynności wymagać mogą uprawnień administratora systemu.

Na szczęście istnieją projekty, których celem jest uproszczenie tego procesu. Dwa najpopularniejsze to RVMrbenv. W procesie instalacji będziemy korzystali z tego pierwszego.

Wymagane oprogramowanie

Zanim przystąpimy do instalacji musimy się upewnić, że w systemie znajdują się pliki nagłówkowe dla bibliotek glibc (glibc-dev), pthread (libpthread-dev), OpenSSL (openssl-dev), ncurses, readline (libreadline-dev), a także narzędzia do kompilacji: gcc, automake, m4 itp.


comments powered by Disqus