|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "За Ruby" |
| 4 | +lang: bg |
| 5 | +--- |
| 6 | + |
| 7 | +Чудите се защо Ruby е толкова популярен и обичан език за програмиране? |
| 8 | +Рубистите го наричат красив и артистичен и въпреки това той е практичен |
| 9 | +и мощен. Но защо? |
| 10 | + |
| 11 | +### Принципи и идеали на създателя на Ruby |
| 12 | + |
| 13 | +{: |
| 14 | +style="padding-left:8px;"} |
| 15 | +{: style="float:right"} |
| 16 | + |
| 17 | +Ruby e перфектно балансиран език за програмиране. Създателят му |
| 18 | +[Yukihiro „matz“ Matsumoto][1] е черпил вдъхновение от любимите си езици |
| 19 | +(Perl, Smalltalk, Eiffel, Ada, и Lisp) докато е писал творението си. |
| 20 | + |
| 21 | +Той често казва, че се е опитал да създаде „естествен, а не лесен за |
| 22 | +писане език“. |
| 23 | + |
| 24 | +### За растежа на Ruby |
| 25 | + |
| 26 | +От първата си публична поява през 1995 година, Ruby привлече отдадени |
| 27 | +програмисти по целия свят. През 2006, Ruby достигна масов прием. |
| 28 | + |
| 29 | +<div style="float:right"> |
| 30 | +{: style="padding-left:8px;"} |
| 33 | +</div> |
| 34 | + |
| 35 | +Ruby-Talk – основният [пощенски списък](/en/community/mailing-lists/) за |
| 36 | +дискусии относно Ruby достигна 200 съобщения на ден. |
| 37 | + |
| 38 | +Индексът в TIOBE, който измерва растежа на езиците за програмиране, |
| 39 | +постави Ruby на 9-то място в световен мащаб. Голям принос за този |
| 40 | +удивителен скок има Ruby On Rails, популярен framework за изграждането |
| 41 | +на интернет приложения. |
| 42 | + |
| 43 | +Ruby е абсолютно [безплатен](./license.txt) за употреба, модификация и |
| 44 | +разпространение. |
| 45 | + |
| 46 | +### Философията „всичко е обект“ |
| 47 | + |
| 48 | +Първоначално Matz преглежда другите езици в търсене на идеалния |
| 49 | +синтаксис. Той споделя: „Исках скриптов език за програмиране, по-мощен |
| 50 | +от Perl и далеч по-обектноориентиран от Python.“ |
| 51 | + |
| 52 | +В Ruby всичко е обект. Всеки бит от информация и код може да притежава |
| 53 | +свои атрибути и методи. Пример за това ни дава кодът, който следва |
| 54 | +(метод, извикан върху число). |
| 55 | + |
| 56 | + 5.times { print "We *love* Ruby -- it's outrageous!" } |
| 57 | +{: .code .ruby-code} |
| 58 | + |
| 59 | +В много други езици числата и примитивните типове не са обекти. Ruby е |
| 60 | +повлиян от Smalltalk и дава възможност за извикването на методи на |
| 61 | +всичките си типове. |
| 62 | + |
| 63 | +### Гъвкавост в Ruby |
| 64 | + |
| 65 | +Ruby е считан за гъвкав език поради факта, че програмистите могат |
| 66 | +свободно да променят всяка една част от кодa. Основни части могат да |
| 67 | +бъдат премахвани или модифицирани. Силата на езика идва от опита за |
| 68 | +премахването на ограниченията, познати в другите езици. |
| 69 | + |
| 70 | +Пример за това е добавянето на метода `plus`, който дублира оператора |
| 71 | +(`+`) директно във вградения клас `Numeric`. |
| 72 | + |
| 73 | + class Numeric |
| 74 | + def plus(x) |
| 75 | + self.+(x) |
| 76 | + end |
| 77 | + end |
| 78 | + |
| 79 | + y = 5.plus 6 |
| 80 | + # y е равно на 11 |
| 81 | +{: .code .ruby-code} |
| 82 | + |
| 83 | +Операторите в Ruby всъщност представляват синтактична „захар“ за |
| 84 | +методите. Те също могат да бъдат променени. |
| 85 | + |
| 86 | +### Експресивност на блоковете |
| 87 | + |
| 88 | +Блоковете в Ruby са друг пример за невероятната гъвкавост на езика. |
| 89 | +Всеки програмист може да „прикачи“ closure към метод, описващ начина, по |
| 90 | +който той ще се изпълнява. „Затварянето“ (closure) се нарича *блок* и се |
| 91 | +е превърнало в една от най-популярните функционалности за начинаещите, |
| 92 | +мигрирали от императивни езици като PHP или Visual Basic. |
| 93 | + |
| 94 | +Появата на блоковете в Ruby е вдъхновена от езиците за функционално |
| 95 | +програмиране. |
| 96 | + |
| 97 | + search_engines = |
| 98 | + %w[Google Yahoo MSN].map do |engine| |
| 99 | + "http://www." + engine.downcase + ".com" |
| 100 | + end |
| 101 | +{: .code .ruby-code} |
| 102 | + |
| 103 | +В горния отрязък код блокът е реализиран в `do ... end` конструкцията. |
| 104 | +Методът `map` се прилага за списъка от думи в блока. Много други методи |
| 105 | +предлагат използването на блокове за прилагането им към специфичен |
| 106 | +списък/код. |
| 107 | + |
| 108 | +### Ruby и Mixin |
| 109 | + |
| 110 | +За разлика от повечето обектно-ориентирани езици, Ruby не предлага |
| 111 | +множествено наследяване по стандартен начин. Тук то е реализирано с |
| 112 | +използването на модули (наричани Категории в Objective-C). Модулите са |
| 113 | +колекции от методи. |
| 114 | + |
| 115 | +Класовете могат да включват модули, като така те получават достъп до |
| 116 | +техните методи. За пример може да се даде всеки клас, имплементиращ |
| 117 | +`each` метода, като това е условието за „наследяване“ на модула |
| 118 | +`Enumerable`, който добавя известен брой методи за работа с `each`. |
| 119 | + |
| 120 | + class MyArray |
| 121 | + include Enumerable |
| 122 | + end |
| 123 | +{: .code .ruby-code} |
| 124 | + |
| 125 | + Като цяло рубистите смятат, че това е по-изчистен начин за реализиране на идеята за множествено наследяване, което по-принцип е сложно и ограничаващо в много от случаите. ### Визуално представяне на Ruby код |
| 126 | + |
| 127 | +Ruby не се нуждае от декларация на променливи. За сметка на това |
| 128 | +притежава лесен начин за именоване нa различните променливи. |
| 129 | + |
| 130 | +* `var` е локална променлива. |
| 131 | +* `@var` е променлива на инстанцията. |
| 132 | +* `$var` е глобална променлива. |
| 133 | + |
| 134 | +Тези означения спомагат за четливост, като позволяват на програмиста да |
| 135 | +идентифицира лесно ролята на всяка променлива. По този начин се премахва |
| 136 | +употребата на `self.` като идентификатор на всеки член на инстанцията. |
| 137 | + |
| 138 | +### Отвъд основните принципи |
| 139 | + |
| 140 | +Ruby притежава множество други черти, като някои от тях са: |
| 141 | + |
| 142 | +* Прихващане и обработка на exceptions, както в Java или Python, което |
| 143 | + улеснява манипулацията на грешки. |
| 144 | +* Притежава истински Garbage Collector за всички обекти, което премахва |
| 145 | + нуждата от ръчно заделяне и освобождаване на памет. |
| 146 | +* Писането на C разширения в Ruby е по-лесно от това на Perl или Python, |
| 147 | + с елегантно API за извикване на Ruby от C. Това спомага за вграждането |
| 148 | + на Ruby като скриптов език. Налична е поддръжка на SWIG интерфейс. |
| 149 | +* Позволява динамично зареждане на разширителни външни библиотеки в |
| 150 | + случай, че операционната система го позволява. |
| 151 | +* Позволява програмиране с нишки, независимо от операционната система. |
| 152 | +* Ruby е преносим език: създаден предимно на GNU/Linux, но работи под |
| 153 | + много UNIX-базирани операционни системи, Mac OS X, Windows |
| 154 | + 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 и др. |
| 155 | + |
| 156 | +#### Референции |
| 157 | + |
| 158 | +<sup>1</sup> Matz в пощенския списък Ruby-Talk, [May 12th, 2000][2]. |
| 159 | +{: #fn1} |
| 160 | + |
| 161 | +<sup>2</sup> Посетете сайта на [Ruby on Rails][3] за повече информация. |
| 162 | +{: #fn2} |
| 163 | + |
| 164 | +<sup>3</sup> Matz в [Интервю със създателя на Ruby][4], Nov. 29th, 2001. |
| 165 | +{: #fn3} |
| 166 | + |
| 167 | +<sup>4</sup> Matz в [Blocks and Closures in Ruby][5], December 22nd, |
| 168 | +2003. |
| 169 | +{: #fn4} |
| 170 | + |
| 171 | + |
| 172 | + |
| 173 | +[1]: http://www.rubyist.net/~matz/ |
| 174 | +[2]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 |
| 175 | +[3]: http://rubyonrails.org/ |
| 176 | +[4]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html |
| 177 | +[5]: http://www.artima.com/intv/closures2.html |
0 commit comments