Выбрать главу

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

Вызов метода m объекта obj1 со списком параметров arg и блоком blk (иначе называемый посылкой сообщения m получателю obj) записывают в виде obj.m(arg){blk} или obj.m(arg) do blk end. Для вызовов, выполняемых вне классов («на верхнем уровне»), получателем является main – экземпляр класса Object, создаваемый при старте Ruby–программы. Примеры вызовов методов приведены в таблице A.8.

В языке Ruby имена используются для ссылок на константы, переменные, методы, классы и модули. В таблице A.9 перечислены зарезервированные слова, которые не могут быть использованы в качестве имён.

Имена констант должны начинаться с большой латинской буквы (от A до Z), за которыми может следовать любая последовательность больших и малых латинских букв, цифр и символов подчёркивания (_).

Переменные в языке Ruby бывают четырёх различных видов: локальные, экземпляра, класса и глобальные. Имена локальных переменных должны начинаться с малой латинской буквы (от a до z) или символа подчёркивания, за которыми может следовать любая последовательность больших и малых латинских букв, цифр и символов подчёркивания. В именах локальных переменных, состоящих из нескольких слов, рекомендуется использовать подчёркивание, например, day_week.

К именам переменных экземпляра вначале добавляется символ @ (например, @x), переменных класса – два таких символа (например, @@name), а глобальных переменных – символ $ (например, $_). Некоторые предопределённые объекты имеют имена, отступающие от этого правила.

Методы, не являющиеся переопределяемыми операторами (см. таблицу A.11), должны иметь имя, образованное по тем же правилам, что и имена локальных переменных. К имени метода может быть добавлен восклицательный (!) или вопросительный знак (?), либо символ =. Рекомендуется использовать такие имена для методов, изменяющих объект-получатель (self), возвращающих логическое значение и допускающих использование в левой части оператора присваивания соответственно.

Имена классов и модулей являются константами и следуют описанным выше правилам. Рекомендуется для констант, определяемых в классах, ис-

В случае отсутствия явного получателя им является объект self – тот экземпляр некоторого класса, в контексте которого происходит данный вызов.

Таблица A.8. Примеры вызовов методов

Вызов Комментарий
puts "Здравствуй, мир!" Получатель – предопределённый объект main класса Object. Этот класс включает в себя модуль Kernel, имеющий метод puts, вызов которого эквивалентен вызову STDOUT.puts
puts В отличие от предыдущего случая параметров нет. Результат – вывод символа перевода строки \n
2.+(3) Получатель – число 2 (объект класса Fixnum). Параметр – число 3. Выражение 2+3 (см. таблицу A.11) эквивалентно данному вызову
[1,2,3][0]=4 Получатель – массив [1,2,3] (см. таблицу A.11). В результате вызова массив станет равным [4,2,3]
"123".to_i Получатель – строка "123". Метод to_i класса String без параметров возвращает целое число 123
) СО ( i _ 0  t 3" 2 1 Параметр 8 указывает, что строку надо рассматривать, как число, записанное в восьмеричной системе счисления. Метод возвращает целое число 83
3.times do |i| pi end Получатель – число 3. Параметров нет, но имеется блок. Метода times класса Integer выполняет этот блок, передавая в него последовательно значения 0, 1 и 2. В результате будут напечатаны три строки

Получатель – экземпляр а класса Array, включающего в себя модуль Enumerable. Метод inject присваивает переменной s параметр (0) и вычисляет затем выражение s+x последовательно для всех элементов массива х, запоминая результат в s. Метод возвращает сумму элементов массива (число 15)

[1,2].to_i Получатель – массив [1,2]. Так как класс Array, его родительский класс Object и включённые в них модули не содержат метода с именем to_i, то возникает исключительная ситуация NoMethodError пользовать только большие буквы и символ подчёркивания, а при построении имён классов и модулей применять так называемый М1хеёСазе, когда каждое из слов, образующих сложное имя, пишется с большой буквы.

Таблица A.9. Зарезервированные слова языка Ruby

__FILE__ and def end in or self unless
_ LINE_ begin defined? ensure module redo super until
BEGIN break do false next rescue then when
END case else for nil retry true while
alias class elsif if not return undef yield