|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "O języku Ruby" |
| 4 | +lang: pl |
| 5 | +--- |
| 6 | + |
| 7 | +Zastanawiasz się dlaczego Ruby jest tak popularny? Jego fani nazywają go |
| 8 | +pięknym, pełnym sztuki językiem. Mimo to, twierdzą, że jest poręczny i |
| 9 | +praktyczny. O co chodzi ? |
| 10 | + |
| 11 | +### Ideały twórcy języka Ruby |
| 12 | + |
| 13 | +{: |
| 14 | +style="padding-left:8px;"} |
| 15 | +{: style="float:right"} |
| 16 | + |
| 17 | +Ruby jest językiem starannie dobranej równowagi. Jego twórca, [Yukihiro |
| 18 | +“matz” Matsumoto][1], połączył części jego ulubionych języków (Perla, |
| 19 | +Smalltalka, Eiffel, Ady i Lispa) by uformować nowy język, który |
| 20 | +zbalansował programowanie funkcjonalne wraz z programowanie |
| 21 | +imperatywnym. |
| 22 | + |
| 23 | +Matz często mówi, że chce uczynić ten język naturalnym – nie prostym – w |
| 24 | +sposób w sposób odzwierciedlający życie. Później dodaje: |
| 25 | + |
| 26 | +> Ruby jest prosty z wyglądu, ale bardzo skomplikowany w środku, tak jak |
| 27 | +> ciało ludzkie<sup>[1](#fn1)</sup>. |
| 28 | +
|
| 29 | +### O rozwoju Ruby |
| 30 | + |
| 31 | +Począwszy od publicznego wydania w 1995, Ruby zwrócił na siebie uwagę |
| 32 | +wielu programistów na całym świecie. W 2006 Ruby uzyskał masową |
| 33 | +akceptację, co objawiło sie w postaci dużej ilości aktywnych grup |
| 34 | +użytkowników powstających w największych miastach świata oraz salach |
| 35 | +konferencyjnych wypełnionych po brzegi. |
| 36 | + |
| 37 | +{: style="padding-left:8px;"} |
| 40 | +{: style="float:right"} |
| 41 | + |
| 42 | +Ruby-Talk, główna [lista mailingowa](/en/community/mailing-lists/) na |
| 43 | +tematy związane z Rubim, osiągnęła średnio ruch 200 wiadomości dziennie. |
| 44 | + |
| 45 | +Wskaźnik TIOBE, który mierzy rozwój języków programowania, umieszcza |
| 46 | +Rubiego na 10 miejscu. Wiele owego wzrostu zawdzięcza Ruby popularności |
| 47 | +software napisanego przy jego użyciu, szczególnie frameworkowi Ruby on |
| 48 | +Rails<sup>[2](#fn2)</sup>. |
| 49 | + |
| 50 | +Ruby jest także [zupełnie darmowy](./license.txt). Darmowe jest nie |
| 51 | +tylko korzystanie, ale również kopiowanie, modyfikowanie i |
| 52 | +rozprowadzanie tego języka. |
| 53 | + |
| 54 | +### Postrzeganie Wszystkiego Jako Obiekt |
| 55 | + |
| 56 | +Początkowo, Matz szukał w innych językach idealnej składni. Wspominając |
| 57 | +swoje poszukiwania, Matz mówi: “Szukałem języka potężniejszego od Perla |
| 58 | +i bardziej obiektowego od Pythona”\[3\].” |
| 59 | + |
| 60 | +W Rubim, wszystko jest obiektem. Każdy fragment informacji i kodu może |
| 61 | +uzyskać swoje właściwości i czynności. Programowanie obiektowe nazywa |
| 62 | +właściwości *zmiennymi instancji* a czynności *metodami*. Czysto |
| 63 | +obiektowe podejście Rubiego jest zazwyczaj demonstrowane przy użyciu |
| 64 | +fragmentu kodu, który wywołuje czynność na liczbie. |
| 65 | + |
| 66 | + 5.times { print "We *love* Ruby -- it's outrageous!" } |
| 67 | +{: .code .ruby-code} |
| 68 | + |
| 69 | +W wielu językach, liczby i inne typy podstawowe nie są obiektami. Ruby |
| 70 | +podąża za Smalltalkiem udostępniając metody i zmienne instancji |
| 71 | +wszystkim swoim typom. To ułatwia korzystanie z języka, ponieważ reguły |
| 72 | +mające zastosowanie do obiektów odnoszą sie również do całego języka. |
| 73 | + |
| 74 | +### Elastyczność Rubiego |
| 75 | + |
| 76 | +Ruby postrzegany jest jako język elastyczny, ponieważ pozwala on swoim |
| 77 | +użytkownikom dowolnie modyfikować jego części. Zasadnicze części języka |
| 78 | +mogą zostać usunięte lub przedefiniowane – w zależności od woli. Do |
| 79 | +istniejących już części można dodać nowe. Ruby stara się nie ograniczać |
| 80 | +programisty. |
| 81 | + |
| 82 | +Na przykład, dodawanie wykonuje się za pomocą operatora (`+`). Lecz |
| 83 | +gdybyś chciał wykorzystać w tym celu słowa `plus`, mógłbyś dodać |
| 84 | +stosowną metodę do klasy `Numeric`. |
| 85 | + |
| 86 | + class Numeric |
| 87 | + def plus(x) |
| 88 | + self.+(x) |
| 89 | + end |
| 90 | + end |
| 91 | + |
| 92 | + y = 5.plus 6 |
| 93 | + # y wynosi teraz 11 |
| 94 | +{: .code .ruby-code} |
| 95 | + |
| 96 | +Operatory Rubiego są [lukrem składniowym][2] dla metod, metody również |
| 97 | +możesz przedefiniować. |
| 98 | + |
| 99 | +### Bloki, Prawdziwie Ekspresyjna Właściwość |
| 100 | + |
| 101 | +Bloki postrzegane są jako źródło ogromnej elastyczności. Programista |
| 102 | +może dołączyć domknięcie (ang. closure) do dowolnej metody, opisując jak |
| 103 | +dana metoda ma działać. To domknięcie nazywa się *blokiem* i stało się |
| 104 | +ono jednym z najbardziej popularnych właściwości Rubiego dla |
| 105 | +programistów pochodzących ze środowisk PHP i Visual Basic’a. |
| 106 | + |
| 107 | +Bloki zainspirowane zostały [językami funkcjonalnymi][3]. Matz mówił, “w |
| 108 | +blokach Rubiego chciałem oddać szacunek środowisku |
| 109 | +Lispa<sup>[4](#fn4)</sup>.” |
| 110 | + |
| 111 | + search_engines = |
| 112 | + %w[Google Yahoo MSN].map do |engine| |
| 113 | + "http://www." + engine.downcase + ".com" |
| 114 | + end |
| 115 | +{: .code .ruby-code} |
| 116 | + |
| 117 | +W powyższym kodzie, blok jest opisany pomiędzy słowami `do ... end`. |
| 118 | +Metoda `map` aplikuje zadany blok do podanej listy słów (Google Yahoo |
| 119 | +MSN). Wiele innych metod w Rubim udostępnia miejsce dla programisty, |
| 120 | +który może napisać swój własny blok i wykorzystać go w danej metodzie. |
| 121 | + |
| 122 | +### Język Ruby oraz Mixin-y |
| 123 | + |
| 124 | +W przeciwieństwie do innych języków obiektowych, Ruby potrafi realizować |
| 125 | +tylko jednokrotne dziedziczenie (celowo). Język Ruby pozwala jednak na |
| 126 | +korzystanie z modułów (zwanych również Kategoriami w Objective-C). |
| 127 | +Moduły są zbiorami metod. |
| 128 | + |
| 129 | +Klasy mogą dołączyć moduł i w ten sposób przejąć implementację metod z |
| 130 | +modułu. Dla przykładu, którakolwiek z klas implementujących metodę |
| 131 | +`each` może dołączyć moduł `Enumerable`, który z kolei realizuje kilka |
| 132 | +metod, które wykorzystują metodę `each` do iterowania po elementach. |
| 133 | + |
| 134 | + class MyArray |
| 135 | + include Enumerable |
| 136 | + end |
| 137 | +{: .code .ruby-code} |
| 138 | + |
| 139 | +Programiści języka Ruby uznają tą technikę za prostszą niż wielokrotne |
| 140 | +dziedziczenie—które może być skomplikowane i nakłada wiele ograniczeń. |
| 141 | + |
| 142 | +### Ruby’s Visual Appearance |
| 143 | + |
| 144 | +Ruby używa minimalnej liczby elementów składni. Pomimo tego, istnieją |
| 145 | +sposoby na jej udekorowanie. Ruby nie wymaga deklaracji zmiennych, |
| 146 | +jedynie bardzo prostej konwencji, aby zaznaczyć w jakim zakresie żyje |
| 147 | +zmienna. |
| 148 | + |
| 149 | +* `var` może być zmienną lokalną. |
| 150 | +* `@var` jest polem instancji (zmienną instancji). |
| 151 | +* `$var` jest zmienną globalną. |
| 152 | + |
| 153 | +Dzięki tej konwencji, programista może szybko zidentyfikować rodzaj |
| 154 | +zmiennej z którą ma do czynienia. Nie ma już potrzeby wstawiania słowa |
| 155 | +kluczowego `self.` przy każdym wystąpieniu zmiennej instancji. |
| 156 | + |
| 157 | +### Zaawansowane techniki |
| 158 | + |
| 159 | +Ruby posiada bogactwo innych właściwości—niektóre z nich to: |
| 160 | + |
| 161 | +* Ruby obsługuje błędy poprzez wyjątki, zupełnie jak Java lub Python. |
| 162 | + Pozwala to na wykorzystanie dobrze znanego mechanizmu przez |
| 163 | + programistów tych języków. |
| 164 | +^ |
| 165 | + |
| 166 | +* Ruby posiada prawdziwy garbage collector typu mark-and-sweep dla |
| 167 | + wszystkich obiektów żyjących w pamięci obiektowej. Nie ma potrzeby |
| 168 | + przetrzymywania informacji na temat liczby odniesień do obiektu. Jak |
| 169 | + mówi Matz, “Wpływa to korzystnie na twoje zdrowie.” |
| 170 | +^ |
| 171 | + |
| 172 | +* Pisanie rozszerzeń do Rubiego jest prostsze niż w Perlu lub Pythonie i |
| 173 | + ma bardzo eleganckie API dostępne w języku C. Pozwala ono na |
| 174 | + wbudowanie interpretera Rubiego do aplikacji jako język skryptowy. |
| 175 | + Dostępny jest również interfejs SWIG. |
| 176 | +^ |
| 177 | + |
| 178 | +* Jeśli system operacyjny na to pozwala, Ruby pozwala na dynamiczne |
| 179 | + ładowanie bibliotek. |
| 180 | +^ |
| 181 | + |
| 182 | +* Ruby posiada wątki, które są niezależne od systemu operacyjnego. To |
| 183 | + znaczy, że są one dostępne na każdej platformie, niezależnie od tego, |
| 184 | + czy sama platforma wspiera wątki—można ich używać nawet w MS-DOS! |
| 185 | +^ |
| 186 | + |
| 187 | +* Ruby jest bardzo przenośny: rozwijany głównie na platformie GNU/Linux, |
| 188 | + ale może być używany na wielu typach UNIXów, Mac OS X, Windows |
| 189 | + 95/98/Me/NT/2000/XP/Vista, DOS, BeOS, OS/2, itd. |
| 190 | + |
| 191 | +#### Odnośniki |
| 192 | + |
| 193 | +<sup>1</sup> Matz, wypowiedź na liście ruby-talk, [May 12th, 2000][4]. |
| 194 | +{: #fn1} |
| 195 | + |
| 196 | +<sup>2</sup> Zobacz stronę [Ruby on Rails][5] aby dowiedzieć sie więcej. |
| 197 | +{: #fn2} |
| 198 | + |
| 199 | +<sup>3</sup> Matz, w [Wywiad z twórcą języka Ruby][6], Nov. 29th, 2001. |
| 200 | +{: #fn3} |
| 201 | + |
| 202 | +<sup>4</sup> Matz, w [Bloki i domknięcia w Rubym][7], December 22nd, |
| 203 | +2003. |
| 204 | +{: #fn4} |
| 205 | + |
| 206 | + |
| 207 | + |
| 208 | +[1]: http://www.rubyist.net/~matz/ |
| 209 | +[2]: http://pl.wikipedia.org/wiki/Lukier_sk%C5%82adniowy |
| 210 | +[3]: http://en.wikipedia.org/wiki/Functional_programming |
| 211 | +[4]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 |
| 212 | +[5]: http://rubyonrails.org/ |
| 213 | +[6]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html |
| 214 | +[7]: http://www.artima.com/intv/closures2.html |
0 commit comments