Александр Неткачев БЫСТРЫЙ КУРС RUBY
«Конец моим страданиям и разочарованиям»Из песенки Вини-Пуха.
Введение
Название Ruby уже неоднократно попадалось мне на глаза на различных сайтах. К сожалению, я до сегодняшнего дня не находил времени исследовать Ruby. Почему к сожалению? Потому что это действительно замечательный язык и я это только сейчас узнал, что и стало поводом написать этот курс. Курс ориентирован на читателей, которые уже знают какой-либо язык программирования и понимают магию, с помощью которой из набора разрозненных операторов получается нечто действительно полезное. Поэтому курс сокращен до предела и организован в виде блоков "задача — решение". Блоки сгруппированы в тематические разделы.Особенности Ruby
Язык Ruby был задуман японским программистом Yukihiro Matsumoto в 1993 году как результат синтеза всех лучших черт языков программирования с целью максимально упростить создание программ. Результат синтеза в идеях языка изложен в документации по Ruby. Ниже представлены наиболее важные из них: ● Это интерпретируемый язык. В простейшем случае это означает, что стадия компиляции для него отсутствует. Это сокращает время, необходимое для создания программы. ● В Ruby переменная может хранить любой объект — можно сказать, что Ruby безтиповый язык, как PHP или Perl. ● Определять переменные не нужно. Для задания области видимости переменной используются приставки. Например $myVar — это глобальная переменная, а myVar — локальная. ● Garbage Collector освобождает от управления памятью. Объекты, на которыре не существует ссылок, автоматически выгружаются из памяти. ● Примитивные типы отсутствуют — любое значение является объектом. ● Поддержка основных концепций ООП. ● Чрезвычайно гибкая система итераторов. ● Части кода представлены как объекты ● Поддержка регулярных выражений и сходные с Perl методы работы с ними. ● В Ruby нет разделения на Integer, Long, Byte. Для целочисленных типов есть только один тип, в рамках которого можно проводить вычисления с произвольным количеством разрядов. ● Механизмы перехвата исключений (как в Java). Другие особенности, которые мне особо понравились: ● Поддержка потоков ● Все операторы возвращают значения, в том числе управляющие структуры (if, case) ● return в конце функции не обязателен, возвращается значение последнего оператора. Например: ● def myFunction(a, b) ● a + b ● end ● puts myFunction(1, 2) напечатает 3. ● Условия and и or возвращают элемент, эквивалентный true или первый элемент Например: ● puts 5 or 10 > 5 ● puts 10 or nil > 10 ● puts nil or 7 > 7 ● puts nil and 10 > nil Внимание программистам на C и производных: пустая строка и ноль не расцениваются как false. false — это только nil (null).Установка Ruby
Gentoo Linux
Если у вас Gentoo Linux, то Ruby уже, скорее всего, будет установлен. Если же нет, то это досадное недоразумение исправляется очень легко. $ emerge ruby Далее можно переходить к установке дополнительных модулей или к первым программам на Ruby.Установка дополнительных пакетов
Для Ruby есть большое количество различных библиотек и расширений. Доступные в Gentoo Linux можно посмотреть с помощью $ emerge -s ruby Кстати, если вы регулярно обновляете Portage, то, возможно, mod_ruby можно уже установить через "emerge mod_ruby". В моей версии его статус еще Masked. mod_ruby modruby.net — сайт Apache модуля mod_ruby. Установка крайне проста: $ tar -xzf mod_ruby-1.0.7.tar.gz $ cd mod_ruby-1.0.7 $./configure.rb --with-apxs=/path/to/apxs $ make $ make install Затем редактируем файл настроек apache (httpd.conf или apache.conf) и добавляем в него следующее: # загрузка модуля mod_ruby LoadModule ruby_module /usr/lib/apache/mod_ruby.so AddModule mod_ruby.c # Настройка обработчиков для файлов *.rbx <IfModule mod_ruby.c> RubyRequire apache/ruby-run<Location /ruby> SetHandler ruby-object RubyHandler Apache::RubyRun.instance Options +ExecCGI </Location>
<Files *.rbx> SetHandler ruby-object RubyHandler Apache::RubyRun.instance Options +ExecCGI </Files>
</IfModule> Примечание: это немного расходится с примером, указанным в документации, но именно так у меня получилось запустить Ruby скрипты. Для тестирования создайте в директории public_html файл hello.rbx вида puts "Hello!" Обращаемся к нему по ссылке (у вас может быть другая ссылка) "http://localhost/~alex/hello.rbx". Если отработало, значит все получилось. Если нет, обращайтесь, поможем, чем сможем. Установка книги "Programming Ruby: The Pragmatic Programmers' Guide" Авторы: Dave Thomas и Andrew Hunt $ emerge dev-ruby/programming-ruby Примечание: новая редакция книги находится на сайте phrogz.net MySQL расширение для Ruby $ emerge dev-ruby/mysql-ruby
Windows
Для установки в Windows достаточно скачать один из вариантов Ruby с http://ftp.ruby-lang.org/pub/ruby/binaries/ (я выбрал mswin32/ruby-1.8.1-20040402-i386-mswin32.zip). Далее распаковать и проставить правильно пути к директориям. Можно также воспользоваться пакетом автоматической установки RubyInstaller Определить правильность установки поможет команда C: \>ruby --helpИнструментарий языка
Управляющие структуры
if в несколько строк
if 1 > b #… elsif a == 1 #… else #… endif в одну строку
if 1 > b then 1 else 2 endcase
case node.type when node.DocumentNode then #… else #… endПостусловие
a = 1 if a > 1Циклы
i = 1 while i < 10 puts i += 1 endi = 1 puts i += 1 while i < 10