Вчимо Ruby разом! Урок 1
"Вітання! Чим займаєшся? »-« Та так, одну штуку на рубай программлю. »-« Це заразно :-) »Ось такий діалог відбувся у мене сьогодні з одним приятелем. Чому ruby?
Навіщо вчити Ruby
Це питання стосується тих, хто вже довго і успішно програмує на PHP. Ви освоїлися в одній мові, це здорово, але не треба зупинятися на досягнутому. Багато хто може заперечити, що вони знають мову, орієнтуються в нёі і вже вивчили всі граблі з ним. Я назву кілька причин для вивчення Ruby.
- Цікавість. Мені, наприклад, було дуже цікаво попрацювати з відкритими класами. Ось так ось узяти і инжектировать свій метод в системний клас - на мою це здорово. А чи не буде плутанини? А як це зробити? Вообщем цікаво все нове.
- Ruby vs PHP. Оскільки я давно программлю на PHP, мені цікаво чому ж Ruby може похвалитися перед PHP /
- Швидкість роботи Ruby. На Ruby зроблений твіттер (хоча останнім часом від нього і відмовилися). Хочеться в реальності перевірити його продуктивність.
- Клас вирішуваних завдань. Рубі хороший для веб-додатків. А чи так це?
- Метапрограмування. Мабуть найголовніша причина.
Як вивчати Ruby. Навчальний план.
Ось тут моєї першої помилкою було те, що я почав вивчати фреймворк не знаючи мову. Тепер я зрозумів, що так робити не треба. Забувши на час про Ruby on Rails я почав вивчати сам Ruby, благо в тікет-системі довгий час висіла системна задача, яку на php вирішувати було важко. Вже дуже не хотілося давати йому права root Отже план такий.
- Установка Ruby, настройка оточення.
- Загальний синтаксис. Типи даних Ruby.
- Функції, класи, відкриті класи. Атрибути (аксессор і мутатори).
- Робота з рядками, з масивами. Пошук і заміна подстрок і т.д. Перетворення типів.
- Робота з файлами.
- Робота з системним оточенням.
- Оформлення додатки, робота з гемамі (модулями).
- Робота з БД.
- Установка 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, а також тим, хто вже програмує на Ruby і хоче досягти більш високого рівня розуміння і майстерності роботи. Знайти книжку можна на озоне або бібліо-глобусі.
3 Responses to "Вчимо Ruby разом! Урок 1"
Свого часу робив вибір між Ruby і Python вже кодя на PHP (до речі про граблі теж в блозі писав). Вибрав Python, за багатьма параметрами. Швидше, старше, веб-фреймворків кілька, системних скриптів в Ubuntu на ньому безліч, Google його юзает щосили (розробник Python зараз там працює). Ruby цікавий звичайно, але з практичних міркувань довелося відмовитися ...
В даному конкретному випадку не можна розширювати клас рядків методом valid_domain_name. тому це не зовсім вкладається в парадигму ООП. Цей метод має вузьку спеціалізацію, тому, логічніше було б винести його в окремий клас або модуль, або ж визначати цей метод в конкретному інстанси рядки, а не у всіх рядках підряд.
Ну і реально, код написаний в php-style, тут не видно «краси» ruby