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

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

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

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

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

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

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

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

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

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

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

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

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

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

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

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

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

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

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

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

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

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

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

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

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

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

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

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

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

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

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

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

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

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 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