Учим Ruby вместе! Урок 1

“Привет! Чем занимаешься?” – “Да так, одну штуку на руби программлю.” – “Это заразно :-)”
Вот такой диалог состоялся у меня сегодня с одним приятелем. Почему ruby?

 

Зачем учить Ruby

Этот вопрос касается тех, кто уже долго и успешно программирует на PHP. Вы освоились в одном языке, это здорово, но не надо останавливаться на достигнутом. Многие могут возразить, что они знают язык, ориентируются в нёи и уже изучили все грабли с ним. Я назову несколько причин для изучения Ruby.

  1. Любопытство. Мне, например, было очень интересно поработать с открытыми классами. Вот так вот взять и инжектировать свой метод в системный класс – по моему это здорово. А не будет ли путаницы? А как это сделать? Вообщем интересно всё новое.
  2. Ruby vs PHP. Т.к. я давно программлю на PHP, мне интересно чем же Ruby может похвастаться перед PHP/
  3. Скорость работы Ruby. На Ruby сделан твиттер (хотя в последнее время от него и отказались). Хочется в реальности проверить его производительность.
  4. Класс решаемых задач. Руби хорош для веб-приложений. А так ли это?
  5. Метапрограммирование. Пожалуй самая главная причина.

Как изучать Ruby. Учебный план.

Вот здесь моей первой ошибкой было то, что я начал изучать фреймворк не зная язык. Теперь я понял, что так делать не надо. Забыв на время о Ruby on Rails я начал изучать сам Ruby, благо в тикет-системе долгое время висела системная задача, которую на php решать было тяжело. Уж очень не хотелось давать ему права root 🙂 Итак план такой.

  1. Установка Ruby, настройка окружения.
  2. Общий синтаксис. Типы данных Ruby.
  3. Функции, классы, открытые классы. Атрибуты (аксессоры и мутаторы).
  4. Работа со строками, с массивами. Поиск и замена подстрок и т.д. Преобразование типов.
  5. Работа с файлами.
  6. Работа с системным окружением.
  7. Оформление приложения, работа с гемами (модулями).
  8. Работа с БД.
  9. Установка Ruby on Rails, создание первого приложения.

В этом посте я опубликую своё первое приложение на Ruby и приглашаю всех желающих к обсуждению. Указывайте на ошибки, предлагайте best practice, задавайте вопросы.

Давайте учить Ruby вместе!

Урок 1. Первое приложение на Ruby.

Задача стоит такая. Есть DNS сервер на хостинге и надо при вызове консольной утилиты на ruby добавлять зону для домена а также запись зоны в список зон (domains.list) и изменять одну запись в БД, куда прописывать этот домен. Настройки доступа к БД хранятся в php приложении, а конкретно в его INI файле. После всех действий надо перезагрузить DNS сервер (bind).

Рабочая среда для Ruby

В качестве IDE буду использовать RubyMine от JetBrains. Уж очень мне понравился их доклад на последнем ZFConf. Хоть он и был про phpStorm, но качество видно сразу. Руби ставим через RVM сначала для всех юзеров, потом настраиваем для рута и своего юзера.

Расширение открытых классов Ruby

Для работы с INI файлами в Ruby используем gem inifile. Но в нём есть небольшая проблема. В ZF INI файле можно спокойно использовать константы, и строки получаются такого вида:

Вот от APPLICATION_INI то и сносит парсер гема. А конкретно то, что эта строка не подходит ни под один паттерн:

Вот и ситуация для применения открытых классов. Заменим фунуию IniFile::parse на свою. Все дополнения я буду складывать в файл fucntion.rb

Также я расширю класс String, чтобы можно было валидировать домены.

 

Исходники

Ну а теперь покажу вам собственно исходники.
index.rb

Gemfile
В этом файле описываются зависимости проекта.

Ну и собственно включаемые функции.
functions.rb

А как же PHP?

Этот пост не сводится к тому, что надо бросить PHP и начать изучать руби. PHP – самый популярный язык веб-программирования, на нём реализованы тысячи интересных вещей и алгоритмов, в т.ч. даже и нейросети. И я его люблю) За многие годы, можно сказать, что я с ним сроднился, несмотря на все его недостатки. Но это не значит, что не надо изучать для себя что-то новое.

Что почитать. Книги по Ruby

Мне в последнее время задают вопрос, по каким книжкам учить Ruby. Я сейчас читаю вот эту.

Эта книга – официальное руководство по динамическому языку программирования Ruby. Авторский состав воистину звездный: Дэвид Флэнаган – известнейший специалист в области программирования, автор ряда бестселлеров по JavaScript и Java; Юкихиро “Matz” Мацумото – создатель и ведущий разработчик Ruby.
В книге приведено детальное описание всех аспектов языка: лексической и синтаксической структуры Ruby, разновидностей данных и элементарных выражений, определений методов, классов и модулей. Кроме того, книга содержит информацию об API-функциях платформы Ruby.

Издание будет интересно опытным программистам, знакомящимся с новым для себя языком Ruby, а также тем, кто уже программирует на Ruby и хочет достичь более высокого уровня понимания и мастерства работы. Найти книжку можно на озоне или библио-глобусе.

Жду ваших комментов по коду и любые интересные идеи!)

3 Comments

  1. В свое время делал выбор между Ruby и Python уже кодя на PHP (кстати про грабли тоже в блоге писал). Выбрал Python, по многим параметрам. Быстрее, старше, веб-фреймворков несколько, системных скриптов в Ubuntu на нем множество, Google его юзает вовсю (разработчик Python сейчас там работает). Ruby интересный конечно, но из практических соображений пришлось отказаться…

  2. В данном конкретном случае нельзя расширять класс строк методом valid_domain_name?, т.к. это не совсем укладывается в парадигму ООП. Этот метод имеет узкую специализацию, поэтому, логичнее было бы вынести его в отдельный класс или модуль, либо же определять этот метод в конкретном инстансе строки, а не во всех строках подряд.

    Ну и реально, код написан в php-style, здесь не видно “красоты” ruby 🙂

Leave a Comment