Термами в языке 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 |