Ruby


Ruby — интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования. Ruby обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, "сборщиком мусора" и многими другими возможностями. Многие особенности синтаксиса и семантики языка Perl заимствованы в Ruby.
Ruby начал разрабатываться 24 февраля 1993 года и вышел в свет в 1995 году.
Ruby — полностью объектно-ориентированный язык. В нём все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы. Каждая функция — метод.

Переменные

Переменные Ruby содержат не сами объекты, а ссылки на них. Присваивание — это не передача значения, а копирование ссылки на объект. Переменные используются, чтобы сохранить промежуточный результат вычислений. Имя переменной в Ruby должно:

• начинаться с буквы или знака подчёркивания;
• состоять из латинских букв, цифр и знака подчёркивания.

Примеры переменных:
array
variable
another_variable
3element # неправильное имя. Начинается с цифры
_3element # а вот как можно
__ # немного странное, но корректное имя переменной


Переменная может иметь имя не только латинское, но и русское. Для этого, правда, требуется, чтобы весь текст программы был написан в кодировке UTF-8, а интерпретатор запускался с параметром -KU.

Присваивание делается знаком равенства (=), вот так:
array = [1, 2, 3, 4]
variable = array + [1, 2]
another_variable = variable - array


То, что справа от =, прежде чем стать значением переменной, обычно полностью вычисляется. Наша переменная variable будет содержать массив [1, 2, 3, 4, 1, 2], ибо именно таков результат действия array + [1, 2]. Плюс (+) с массивами поступает именно так: прицепляет второй массив в хвост первого.

Базовые типы данных

Данные любого типа в Ruby суть объекты тех или иных классов. Самые используемые встроенные типы данных:

• Fixnum (целые числа, меньшие 230),
• Bignum (целые числа, большие 230),
• Float (числа с плавающей запятой),
• Array (массивы),
• String (строки),
• Hash (ассоциативные массивы).

Числа

Числа в Ruby выглядят так:
5 # целое число
-12 # отрицательное целое число
4.5 # число с плавающей запятой
076 # восьмеричное число
0b010 # двоичное число
0x89 # шестнадцатиричное число


Логический тип

Логический (булевый) тип — это вариация на тему «да» или «нет». В Ruby он представлен двумя предопределёнными переменными true («истина» или «да») и false («ложь» или «нет»). Появляется логический тип в результате логических операций или вызова логических методов.
Чаще всего логический тип возникает как результат сравнения.

Или || or
И && and
Не ! not
Исключающее или ^ xor
Методы сравнения
Равно ==
Не равно !=
Меньше <
Больше >
Меньше или равно <=
Больше или равно >=

• Традиционно имена логических методов заканчиваются на ? (знак вопроса)
• В качестве false может выступать nil, а в качестве true — любой объект.
• nil — это символ пустоты.

Массивы

Разработчики Ruby решили не реализовывать особых классов для динамических массивов, списков, стеков и тому подобного. Они все это реализовали в массивах — структурах данных Array. Сделано это путём добавления специальных методов; например, методы .push и .pop для стека. Особенности массивов в Ruby:

• Нет ограничений (это общий принцип языка). Массивы могут быть сколь угодно длинными.
• Динамичность: размер массива легко меняется.
• Гетерогенность: один массив может хранить данные разных типов.
• Библиотека итераторов на каждый случай жизни. Эта возможность позволяет не использовать циклов для обработки данных в массивах, а, следовательно, избегать множества ошибок, связанных с неосторожным обращением с циклами.

1, 0, 740, 14, 88] # целочисленный массив
[[1, 2], [3, 4]] # двумерный целочисленный массив

Строки

Строки — это ряды букв и других символов. В Ruby строки используют наработки языка Perl. Вот небольшой список их возможностей:

• Нет ограничений длины строки.
• Динамичность. Строки можно расширять
• Любой объект преобразуется в строку (методы .inspect и .to_s есть у любого объекта).
• Строка обладает обширной библиотекой методов, которые работают с правилами (это методы .gsub, .match, .scan, .split).
• Можно вставлять произвольный код на языке Ruby в строку. После выполнения код заместится результатом.

Строки начинаются и заканчиваются " (программистскими кавычками) или ' (машинописным апострофом). Пример:

"мама мыла раму" # строка в кавычках
'рама сопротивлялась' # строка в апострофах

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

Ассоциативные массивы

Ассоциативные массивы подобны массивам упорядоченных пар. Работают они подобно словарям: фигурная скобка символизирует боковой вид на открытую книгу, а стрелка => покажет читателю связь каждого одного с чем-то другим. Вторая фигурная скобка говорит, что пора закрывать книгу.
array = {"мама"=>"мыла раму", 807=>"Это число улыбается!"}
Но можно и без фигурных скобок, одной стрелкой:
Например:
puts array["мама"] #=> мыла раму
puts array["807"] #=> nil
puts array[807] #=> Это число улыбается!
puts array[1] #=> nil

Ассоциативные массивы оставляют возможность хранения данных разного типа только в ассоциативном виде.

Классы и объекты

Самодельные и неабстрактные составные типы данных называются классами.
str = "Я - строка"
str.class #=> String
str.class.superclass #=> Object
Классы можно определять и создавать по ним объекты. Классы Ruby поддерживают наследование. Однако множественное наследование в Ruby не разрешается.

Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby (находится в стадии разработки), Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM, MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone, Blue Ruby — реализация Ruby для виртуальной машины ABAP, MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы
Ruby используется в NASA, NOAA (национальная администрация по океану и атмосфере), Motorola и других крупных организациях. Следующие программы используют Ruby как скриптовый язык для расширения возможностей программы или написаны на нём (частично или полностью).

RPG Maker (RPG Maker XP) — RGSS (Ruby Game Scripting System)
SketchUp
Inkscape — скрипты для обработки векторных изображений
XChat
WATIR(англ. Web Application Testing in Ruby) — свободное средство для автоматического тестирования веб-приложений в браузере

Безопасность

Начиная с самых ранних версии и до версии 1.8.4 существовали уязвимости позволяющие удаленному пользователю обходить некоторые ограничения безопасности.
1. Уязвимость существовала из-за ошибки при обработке функционала "alias". Удаленный пользователь мог обойти защиту безопасного уровня и заменить вызываемые методы в доверенном уровне.
2. Уязвимость существовала из-за недостаточной проверки данных при работе с директориями. Удаленный пользователь мог обойти защиту безопасного уровня и закрыть неиспользуемые потоки директорий.
В версии 1.8.5 удалось устранить эти уязвимости.

Преимущества:

• Не надо объявлять переменные.
• Переменные динамически типизированы.
• Простой и последовательный синтаксис.
• Неограниченный диапазон значений целых чисел.
• Модель обработки исключений.
• Механизм перехвата исключений.

Недостатки:

• Невысокая скорость работы.
• Отсутствие поддержки потоков операционной системы (для Unix-подобных операционных систем есть поддержка процессов ОС.
• Отсутствие встроенной поддержки Юникода (возможна работа с использованием дополнительных библиотек).
• Отсутствие компиляции в байткод. В версию 1.9 входит виртуальная машина YARV, компилирующая Ruby в байткод и существенно ускоряющая исполнение.

Hosted by uCoz