Ruby – язык завтрашнего дня::Журнал СА 3.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6413
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7117
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4395
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3086
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3882
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3234
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3529
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7364
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10726
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12445
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14096
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7142
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3495
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3212
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Ruby – язык завтрашнего дня

Архив номеров / 2007 / Выпуск №3 (52) / Ruby – язык завтрашнего дня

Рубрика: Программирование /  Программирование

Владимир Овсянников

Ruby – язык завтрашнего дня

Сегодня очень трудно не заметить ажиотаж вокруг языка программирования Ruby и фреймворка Ruby on Rails.

Ruby (в переводе с англ. – рубин) был задуман в 1993 году японцем Йукихиро Мацумото (Yukihiro Matsumoto), известным как Matz. Фанатик объектно-ориентированного программирования, он решил создать более объектный язык, нежели Python и более мощный, чем Perl.

Первая публичная версия Ruby вышла в 1995 году. Постоянно нарастала его популярность – ведь раз написав хотя бы одну программу на Ruby, писать на другом языке уже невозможно.

Но действительный прорыв в его распространении произошёл совсем недавно – в 2004 году, с появлением Ruby on Rails.

Что же такое Ruby?

Ruby – интерпретируемый язык программирования, поддерживающий много разных парадигм, в первую очередь объектную. Обладает автоматическим «сборщиком мусора» и строгой динамической типизацией, поддерживает многопоточность (*nix и независимая от ОС).

Иерархия базовых классов Ruby

Иерархия базовых классов Ruby

Достоинства Ruby

  • Объектом является абсолютно всё (имя класса – тоже объект). Как и в языке SmallTalk, понятие «примитивный тип» отсутствует (5 – объект класса Fixnum, 'ruby' – объект класса String, ... ). Даже части кода представлены тоже в виде объекта.
  • Простой и последовательный синтаксис. Если вы хорошо говорите, читаете, пишете на английском, то для вас программа на Ruby – великолепная проза. Об этом хорошо изложено в книге «Why's (Poignant) Guide to Ruby» (http://poignantguide.net/ruby).
  • Переменные не нужно объявлять, они не типизированы. Это касается и атрибутов класса.
  • Поддержка основных принципов ООП (классы, методы, полиморфизм, инкапсуляция, примеси, методы-одиночки и т. д.).
  • Блоки/Итераторы. Обычно эти понятия ассоциируются с языком программирования Python, однако Ruby ничем не уступает ему, а благодаря удивительной гибкости языка использование блоков стало более удобным.
  • Неограниченный диапазон значений целых чисел. К сожалению, только целых.
  • Обработка и перехват исключений. В этом плане язык схож с Java.
  • Абсолютно всё возвращает значения. Методы, циклы, блоки и условные операторы if, unless, ?: возвращают последнее высчитанное значение, а условия and и or возвращают элемент, эквивалентный true, или первый элемент. Благодаря этому можно переменную приравнять, допустим, к циклу или конструкции case! Это удобно.
  • Мощная поддержка правил (регулярных выражений). Заимствована у Perl с адаптацией под объектную парадигму.

Ruby – скриптовый язык, хотя имеется средство упаковки в .exe-файл для Win32 (http://exerb.sourceforge.jp), но при упаковке теряются некоторые преимущества программ, написанных на Ruby, такие как неограниченный диапазон целых чисел, кросплатформенность и некоторые другие.

Недостатки Ruby

  • Скорость. Ruby действительно медленный, на что сам автор языка ответил следующим вопросом: «Вам платят за результат, который достигнут в срок или за качество, которое достигнуто с опозданием?» Также хочется отметить, что Java также очень медленный, но тем не менее им пользуются.
  • Интерпретируемый язык. Это проблема для тех, кто пишет коммерческое ПО. Исходный код нельзя утаить даже в готовой программе – это действительно проблема.
  • Невозможность управлять некоторыми процессами, например выделением памяти.
  • Задание низкоуровневых структур данных не представляется возможным.

Установка

  • Linux – большинство дистрибутивов уже распространяется с Ruby. Но если вы не являетесь обладателем оного либо хотите поставить более свежую версию, то взять исходные коды всегда можно с сайта http://www.ruby-lang.org/en/downloads.
  • Windows – на сайте http://www.ruby-lang.org/en/downloads можно взять Ruby One-Click Installer – самый простой способ поставить Ruby на Windows.
  • MacOS – установить Ruby, используя MacPorts (http://www.macports.org), можно командой:

%port install ruby

При установке Ruby ставится irb (Interactive Ruby), именно им и будем пользоваться, запускается в консоли командой irb. (При установке на Windows, используя Ruby One-Click Installer, автоматически в переменную PATH добавляется директорий с бинарными кодами ruby.) Irb – интерактивный интерпретатор выражений Ruby, считываемых со стандартного ввода.

Для удобного и системонезависимого управления модулями/плагинами используется свой собственный формат пакетов (аналог rpm, deb, tgz, tbz, msi, ...) – rubygems. При использовании Ruby One-Click Installer rubygems можно установить сразу (предлагается на втором этапе установки выбрать необходимые компоненты, в том числе и rubygems), а вот для обладателей не Windows придется скачивать rubygems из Интернета и устанавливать отдельно. Установить модуль, например vcard (для работы с форматами vCard и iCalendar), можно командой:

# gem install vcard -y --remote

При этом модуль будет скачан из Интернета c соблюдением всех зависимостей (вам не стоит тратить время на поиски недостающих пакетов) и установлен на вашей машине. Подробнее о gem вы можете узнать, выполнив команду:

# gem --help

Типы данных

Как вы уже знаете, в Ruby всё – объекты тех или иных классов. Базовые классы:

  • Fixnum (целые числа, меньше 231);
  • Bignum (целые числа, больше 231);
  • Float (дроби);
  • String (строки);
  • Array (индексные массивы);
  • Hash (ассоциативные массивы);
  • NilClass (nil/null);
  • TrueClass (истина);
  • FalseClass (ложь).

Ruby автоматически приводит к классу Numeric (в зависимости от значения – Float, Fixnum или Bignum) все объекты следующего вида:

  • 2 – целое число;
  • -3 – отрицательное целое число;
  • 4.5 – число с плавающей точкой;
  • 067 – восьмеричное число;
  • 0b11 – двоичное число;
  • 0xF0F0 – шестнадцатеричное число.

К классу String приводятся все объекты, записанные в апострофах или кавычках. Разница между этими двумя типами записи такая же, как в PHP, – в строках в кавычках происходит автозамена эскейп-последовательностей на соответствующие коды и записи вида #{объект} на значение объекта.

В Ruby есть два предопределённых объекта для обозначения логических значений («да»/«нет») – true (класс TrueClass) и false (класс FalseCalss).

Внимание: пустая строка, ноль, пустой массив… в логических операторах не являются аналогом false, его аналогом является только nil (класс NilClass), остальное – true.

Запись вида [el1, el2, el3] воспринимается как массив (индексный),а {'A'=>1, 'B'=>2, 'C'=>3} – как ассоциативный массив.

Так что следующие строки кода взаимозаменяемы:

arr1 = Array.new

arr2 = []

hash1 = Hash.new

hash2 = {}

Не hello word!

Начнём сразу с более интересных вещей, нежели вывод на экран тривиальной фразы. Метод class есть у всех объектов, и возвращает он класс объекта.

Введите «1.class» и нажмите <Enter>. Irb выведет:

=> Fixnum

значит, 1 – объект класса Fixnum, а вот, написав «(2**99).class», результат будет другой, т.к. целые числа более 231 являются объектами другого класса (** – возведение в степень).

Теперь напишем ещё более интересный пример:

1.class.class

=> Class

Это значит, что класс Fixnum является объектом класса Class, который в свою очередь тоже объект класса Class.

Методы и атрибуты

Когда я программировал на C/C++, порой часто переписывал часть кода, которая обычно была связана с неприязнью использования глобальных переменных. Я в конце концов запутывался, какие переменные у меня локальные, какие глобальные, а какие – атрибуты класса. В Ruby это не проблема:

  • Все имена классов и модулей должны начинаться с большой латинской буквы.
  • Локальная переменная называется просто с маленькой буквы или знака подчёркивания.
  • Все переменные объекта (они же атрибуты) со знака @, за которым следует строчная буква или знак подчёркивания.
  • Переменные класса с @@, за которыми следует строчная буква или знак подчёркивания.
  • Глобальные переменные со знаком «доллар» ($), за которым следует строчная буква или знак подчёркивания.
  • Имена методов также именуются со строчной буквы или знака подчёркивания.

В Ruby можно создать методы с именами, например attr= и attr, которые будут вызываться:

obj.attr = 5

var = obj.attr

А благодаря акцессорам (attr_accessor, attr_reader и attr_writer) отпадает необходимость написания большинства методов для доступа к атрибутам объектов.

class MyFirstClass                    # создаём класс с именем MyFirstClass

   attr_reader :first                 # заменится на def first; @first; end

   attr_writer :second                # заменится на def first=(v); @first = v; end

   attr_accessor :tre                 # attr_reader + attr_writer

   def initialize(attrs)              # конструктор

      @first = attrs[:first]

      @second = attrs[:second]

      @tre = attrs[:tre]

      @end_attr = attrs[:end]

   end

   def end=(oth)                      # метод end = будет  приравнивать @end_attr половине аргумента

      @end_attr = oth/2.to_f          # .to_f – принудительное приведение к Float

   end

   def end                            # метод end будет возвращать квадрат @end_attr

      @end_attr**2                    # методы возвращают последнее вычисленное значение или аргумент return

   end

end

obj = MyFirstClass.new(:first=>'FIRST', :second=>2, :tre=>'ТРИ', :end=>5)

obj.first                      # => FIRST

obj.first = 'ПЕРВЫЙ'           # => ОШИБКА: метод first=() не определён

obj.second = 'ДВА'             # => ДВА

obj.second                     # => ОШИБКА: метод second() не определён

obj.tre = obj.tre*3            # => ТРИТРИТРИ

obj.end                        # => 25

obj.end = 11                   # => 11

obj.end                        # => 30.25

Блоки

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

Думаю, вы не раз забывали закрыть открытый файл, очистить выделенную память, закрыть соединение с сервером...

Теперь это не проблема:

File.open('/tmp/tempfile', 'w') do |tmp|

   tmp.write 'Bla-bla-bla'

end

Блок – анонимный метод. Он захватывает переменные окружающей среды. В примере тело блока ограничено do end, которые, кстати, могут быть заменены на { }. В качестве аргумента блоку передаётся объект класса File. После выхода из блока этой переменной не будет – она локальная для блока.

Блок сам откроет, а главное, закроет файл при необходимости.

Итераторы

Это те же блоки, но заточенные на работу с перечисляемыми объектами (объект является перечисляемым, если у него есть метод succ, возвращающий следующий элемент). То, что в древности люди делали циклами, теперь делают итераторы. Самое главное – что их много и каждый делает своё дело.

Для того чтобы вывести на экран все элементы массива, например, на C, нужно написать:

for(i=0; arr[i]; i++){

    printf("%d\n", arr[i])

}

На Ruby это выглядит приятнее:

arr.each{|el| puts el}

А вот как найти все числа массива, которые делятся на 3 без остатка:

rez = [3,4,5,6,7,8,9,11,12,15,17,21,22,25,30].find_all{|el| (el%3).zero?}

puts rez

На экране появятся числа 3, 6, 9, 12, 15, 21, 30 – всё верно.

Увеличить все элементы в два раза:

rez = [3,4,5,6,7,8,9,11,12,15,17,21,22,25,30].map{|el| el*2}

Разделить массив на две части: в одном собрать все элементы больше 12, а в другом – остальные:

rez = [3,4,5,6,7,8,9,11,12,15,17,21,22,25,30].partition{|el| el>12}

В rez[0] – 15, 17, 21, 22, 25, 30; а в rez[1] – 3, 4, 5, 6, 7, 8, 9, 11, 12

Преимущества итераторов перед циклами очевидны: они проходят по каждому элементу единожды. В отличие от циклов у них нет счётчика, который можно подкручивать.

Их много, и каждый делает своё дело.

Индексы

Ну что за программа без массивов? Думаю, таких нет. Так вот, как, например, выбрать из массива три последних элемента?

Не знаю, как это делаете вы, а я – так:

a = [1,2,3,4,5,6,7,8,9,0]

a[-3..-1]                      # => [8, 9, 0]

Да, отрицательные индексы! Очень удобно.

str = 'String'

str[1]                  # => 116

str[1].chr              # => 't'

Квадратные скобки у строк возвращают коды символов, а не сами символы. Для преобразования кодов в символы используется метод chr. А квадратные скобки у чисел возвращают значения соответствующих битов.

print 5[0], 5[1], 5[2]  # => 101

Вывод на экран

Для вывода на экран есть три метода: puts, print и p. У каждого класса имеются методы to_s и inspect (они наследуются от класса Object). Методы puts и print выводят возвращаемое методом to_s значение, разница лишь в том, что puts после вывода очередного аргумента ставит перевод строки, а print нет. Метод p выводит значение метода inspect и используется для отладки. Методы to_s и inspect должны возвращать именно строку.

Метод to_s класса Integer (целые числа) может принимать в качестве аргумента целое число – основание системы счисления.

5.to_s(2)         # => '101'

8.to_s(7)        # => '11'

59.to_s(27)      # => '25'

100.to_s(36)     # => '2s'

Следует не забывать, что to_s возвращает строку, т.е. 5.to_s(2)*2 вернёт не 10, и даже не 1010, а '101101'.

Хотелось бы отметить, что Ruby уже во многих школах преподают вместо Basic. Также его преподают и в университетах в целях изучения ООП (даже на специальностях, не связанных с информационными технологиями). Всё это потому, что Ruby – самый лёгкий язык программирования.

Скорость написания программ, их компактность и, что немаловажно, их читаемость поражают воображение. Под читаемостью понимается возможность разобраться в исходном коде другому программисту без комментариев.

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

И напоследок:

  • Существует и развивается интерпретатор Ruby для Symbian (http://developer.symbian.com/main/tools/opensrc/ruby/index.jsp).
  • Разработчики JRuby уже работают на компанию SUN Microsystems.
  • По данным http://www.tiobe.com за март 2007 г., Ruby – на 10-м месте по распространённости среди языков программирования.

Ruby – язык завтрашнего для. Учите, дерзайте и развивайте!

  1. Скачать Ruby и множество библиотек к нему можно с сайтов – http://www.ruby-lang.org и http://www.rubyforge.com.
  2. Больше о Ruby можно узнать на http://ru.wikibooks.org/wiki/Ruby и http://ruby-doc.org.
  3. Programming Ruby. The Pragmatic Programmer's Guide – http://pragmaticprogrammer.com. Русскоязычной литературы пока нет, но издательство «Питер» планирует переводить эту книгу.
  4. Интересные скринкасты – http://showmedo.com/videos/series?name=rubyRailsOriginalCastsSeries и http://showmedo.com/videos/video?name=rubyGrosenbachDeprec&fromSeriesID=48.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru