В языке есть 2 эквивалентных способа записи блоков кода:
{ puts "Hello, World!" }
do puts "Hello, World!" end
Сопрограммы применяются с большинством встроенных методов:
File.open('file.txt', 'w') { |file| # открытие файла «file.txt» для записи («w» - write)
file.puts 'Wrote some text.'
} # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе
Следующий пример показывает использование сопрограмм и итераторов для работы с массивами, который показывает краткость записи на Ruby многих достаточно сложных действий (случайно выбираем из последовательности квадратов чисел от «0» до «10» и распечатываем вместе с индексами):
Код:
(0..10).collect{|v| v ** 2 }.select{ rand(2) == 1 }.each_with_index{|v,i| printf "%2d\t%2d\n", i, v }
Классы, примеси, методы, перегрузка операторов
Следующий пример определяет класс с именем Person, предназначенный для хранения информации о имени и возрасте некоторой персоны.
class Person # объявление класса начинается с ключевого слова class, за которым
# следует имя
include Comparable # [[b:Ruby/Справочник/Comparable|Comparable]] подмешивается к классу
# и добавляет методы <, <=, ==, >=, > и between?
# с использованием нижеопределённого
# в классе <=>
#
@@count_obj = 0 # переменная класса для подсчёта числа созданных объектов
#
# конструктор для создания объектов с помощью new
def initialize(name, age) # name, age - параметры метода
# название переменных объекта начинается с @
@name, @age = name, age # cоздаём объекты и увеличиваем счётчик на 1
@@count_obj += 1
end
def <=>(person) # переопределение оператора <=>
# (это даёт возможность использовать метод sort
@age <person> [<3>, <3>, <3>]
# здесь при работе с irb автоматически вызывается метод inspect
# вызываем методы массива сортировка и разворачивание его в обратном порядке
puts group.sort.reverse # Печатает:
# Markus (63)
# John (20)
# Ash (16)
# обращаемся к функции, которая была добавлена
# автоматически(используя <при> true
Реализация
Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby (находится в стадии разработки), Rubinius — написанная в основном на Ruby и базирующаяся на Smalltalk-80 VM.
Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие.
Интерактивный Ruby
С официальной версией интерпретатора Ruby поставляется интерактивный интерпретатор языка. Запускаемый командой irb в консоли, он позволяет тестировать текст программы очень быстро (построчно):
Программа irb выводит результат каждой строки после символов =>. В приведённых выше примерах для наглядности применяется аннотирование — результаты строк программы записываются в комментариях после =>. Имитацию irb можно запустить непосредственно в браузере.
В поставке дистибутива One-Click Installer для Windows, начиная с версии 1.8.2-15, поставляется утилита fxri, которая включает в себя справочную систему (ri) и интерактивный интерпретатор (irb).
Поддержка IDE
Базовые возможности редактирования добавляются к многим редакторам (Emacs, vim, jEdit, nano, SciTE и др.), здесь перечислены только IDE, то есть предоставляющие обширный набор функций.
Стандартная библиотека
Кроме мощных возможностей, встроенных в язык, Ruby поставляется с большой стандартной библиотекой. Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Кроме встроенных в язык средств отладки с Ruby поставляются библиотеки для юнит-тестирования, профилирования. Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределенных вычислений, поддержки многопоточности и т. д..
Динамический массив для хранения произвольных объектов, индексируемый с 0. 1.0
Binding
Объекты сохраняют контекст выполнения некоторого участка кода (значение переменных, методов и т. д.). Может позже использоваться для выполнения вычислений в этом контексте. 1.2
Continuation
Объект сохраняет адрес возврата и контекст выполнения, позволяя выполнить переход в точку создания из любого места программы (т. н. нелокальный переход). 1.4
Data
Обёртка вокруг указателяСи, используется в основном при написании расширений. 1.0
Dir
Директория файловой системы. Предоставляет возможности для просмотра директорий и их атрибутов. 1.0
Exception
Базовый класс всех исключений (образует вершину иерархии более чем 30 исключений) 1.0
FalseClass
Глобальная переменная false является единственной переменной этого класса и представляет логическую ложь в булевских выражениях. 1.0
Hash
Коллекция пар ключ-значение; порядок обхода не зависит от порядка вставки. 1.0
IO
Базовые возможности ввода-вывода. 1.0
File
Класс для доступа к файлам. 1.0
MatchData
(до 1.6 MatchingData)
Результат применения регулярного выражения. Обычно используется не напрямую, а через специальные переменные $&, $', $`, $1, $2 и т. д. 1.0
Method
Метод, асоциированный с конкретным объектом (не с классом). Может использоваться для вызова этого метода без наличия объекта. 1.2
Module
Класс модулей. 1.0
Class
Класс классов; классы в Ruby являются объектами, а Class является классом этих объектов (метаклассом). 1.0
NilClass
Единственным экземпляром класса является переменная nil. nil и false представляют ложь в программах. Любой другой обьект представляет собой истину. 1.0
Numeric
Абстрактный класс чисел. 1.0
Integer
Абстрактный класс целых чисел. Может трактоваться как бесконечная битовая строка для битовых операций. 1.0
Bignum
Целые числа ограниченные только количеством памяти. Конвертируется в Fixnumавтоматически, если значение может быть размещено в них и наоборот. 1.0
Fixnum
Целые числа, которые могут быть размещены в машинном слове (32 бита для большинства машин). Если результат операции выходит за рамки, автоматически преобразуется в Bignum. 1.0
Float
Числа с плавающей запятой. 1.0
Proc
Блок кода со связанным с ним контекстом (замыкание), который может выполняться неоднократно в других контекстах. 1.0
Range
Интервал: множество значений, заданных с начальным и конечным элементами. 1.0
Regexp
Регулярное выражение. 1.0
String
Строка байт произвольной длины. 1.0
Struct
Предоставляет простой способ связывания атрибутов вместе без написания кода класса напрямую; генерирует специальные классы, содержащие множество переменных и методов доступа. 1.0
Symbol
Представляет имя и создаётся при использовании синтаксиса :name. Все объекты с данным именем созданные в программе — ссылки на один объект. 1.6
Thread
Инкапсулирует информацию о потоке, включая основной поток скрипта Ruby. 1.0
ThreadGroup
Предоставляет способ управления группой потоков. Поток может принадлежать только к одной ThreadGroup. Добавление потока к новой группе удаляет его из любой предыдущей. 1.6
Time
Дата и время. 1.0
TrueClass
Глобальная переменная true является единственной переменной класса и представляет логическую истину в булевских выражениях. 1.0
UnboundMethod
Метод, не связаный с конкретным объектом. Может привязываться к объекту и вызываться как Method.. 1.6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах