Предыдущая часть – часть 2: классы и объекты.
В Ruby есть пять типов переменных, часть из которых мы кратко рассмотрели в предыдущей части.
Содержание
Глобальные перменные Ruby
Глобальные переменные начинаются с символа $
. Непроинициализированные глобальные переменные имеют значение nil
(null, void) и вызывают предупрежение при использовании опции -w
.
Примечание: интересное обсуждение nil vs null
в английском языке можно найти тут>>>.
Пример использования глобальных переменных в Ruby:
#!/usr/bin/ruby $global_variable = 10 class Class1 def print_global puts "Global variable in Class1 is #$global_variable" end end class Class2 def print_global puts "Global variable in Class2 is #$global_variable" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global
Результат:
$ ./globals.rb Global variable in Class1 is 10 Global variable in Class2 is 10
Примечание: в Ruby вы можете получить доступ к значениею любой перменной с помощью символа #
.
Переменные экземпляра
Переменные экземпляра начинаются с символа @
, например:
#!/usr/bin/ruby $glob = "global" class Customer def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" puts "Global var: #$glob" end end # Create Objects cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # Call Methods cust1.display_details() cust2.display_details()
Тут $glob
– глобальная переменная, а @cust_id
, @cust_name
и @cust_addr
– переменные объекта (или инстанса класса).
Результат выполнения такого кода:
$ ./instance_var.rb Customer id 1 Customer name John Customer address Wisdom Apartments, Ludhiya Global var: global Customer id 2 Customer name Poul Customer address New Empire road, Khandala Global var: global
Переменные класса
Переменные класса начинаются с двух символов @
, т.е. – @@
и должны быть проинициализированные перед использованием в методах.
Ссылка на непроинициализированную переменную класса вызовет ошибку.
Переменные класса доступны всем потокам класса или модуля, в которых они заданы.
Переназначение данных в такой перменной вызовет предупреждение при использовании опции -w
.
Пример:
$ cat class_var.rb #!/usr/bin/ruby class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Total number of customers: #@@no_of_customers" end end # Create Objects cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # Call Methods cust1.total_no_of_customers() cust2.total_no_of_customers()
Тут @@no_of_customers
является переменной класса. Результат выполнения такого кода:
$ ./class_var.rb Total number of customers: 1 Total number of customers: 2
Локальные переменные
Локальные переменные начинаются со строчной буквы или символа подчеркивания “_
“. Область видимости локальной переменной может ограничиваться классом, модулем, функцией, оператором end
или парой фигурных скобок “{}
“.
Обращение к непроинициализированной переменной обрабатывается как ее объявление.
В примере выше локальными перменными являются id
, name
и addr
:
... def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end ...
Константы в Ruby
Имена констант всегда обозначаются буквами в верхнем регистре.
Область видимости констант, заданных в классе или модуле огранивается этим классом или модулем, тогда как константы заданные вне класса – будут доступны глобально.
Определять константу можно вне методов класса. Обращение к непроинициализированной константе вызовет ошибку, а попытка изменить значение константы вызовет предупреждение.
Пример констант в Ruby:
#!/usr/bin/ruby class Example VAR1 = 100 VAR2 = 200 def show puts "Value of first Constant is #{VAR1}" puts "Value of second Constant is #{VAR2}" end end # Create Objects object=Example.new() object.show
Пример выполнения:
$ ./const.rb Value of first Constant is 100 Value of second Constant is 200
Примечание: переменные и константы в Ruby неплохо описаны на русском тут>>>.
Псевдопеременные в Ruby
Псевдопеременные – это специальные перменные, которые схожи с локальными переменными – но ведут себя как константы. Вы не можете присвоить свое значение таким переменным:
self
: определяет объект, чей метод был вызван;true
: представлениеTrue
;false
:представлениеFalse
;nil
: неопределенное значение;__FILE__
: имя текущего файла;__LINE__
: номер строки в текущем файле.
Базовые литералы в Ruby
1. Целочисленные литералы
Целые числа в Ruby могут иметь значение от -230 до 230-1 и от -262 до 262-1. Такие числа хранятся в объектах класса Fixnum
, а большие числа – Bignum
.
Примечание: Fixnum
vs Bignum
могут быть сравнены с int
и long int
в Java или C. Подробнее – тут>>>.
Примеры записи целочисленных литералов:
123 # Fixnum decimal 1_234 # Fixnum decimal with underline -500 # Negative Fixnum 0377 # octal 0xff # hexadecimal 0b1011 # binary ?a # character code for 'a' ?n # code for a newline (0x0a) 12345678901234567890 # Bignum
2. Числа с плавающей точкой
Числа с плавающей точкой являются объектами класса Float
и могут иметь такой вид:
123.4 # floating point value 1.0e6 # scientific notation 4E20 # dot not required 4e+20 # sign before exponential
3. Строковые литералы
Строки в Ruby – это последовательность 8-битных байтов, которые являются объектами класса String
. Строки в двойных кавычках позволяют выполнять замену символов в строке и использование обратного слеша. Строки в одинарных кавычках не позволяют выполнять замену, а обратный слеш допустим только в виде “\
” или “'
“.
Пример:
$ cat string.rb #!/usr/bin/ruby -w puts 'escape using "\"'; puts 'That's right';
Результат:
$ ruby string.rb escape using "" That's right
Вы можете превратить результат любого выражения в Ruby в строку с помощью последовательности #{ выражение }
, например:
#!/usr/bin/ruby -w puts "Multiplication Value : #{24*60*60}";
Результат:
$ ruby expr.rb Multiplication Value : 86400
4. Управляющие последовательности
Ниже приведен сисок управляющих последовательностей в Ruby:
Notation |
Character represented |
|
Newline (0x0a) |
|
Carriage return (0x0d) |
|
Formfeed (0x0c) |
|
Backspace (0x08) |
|
Bell (0x07) |
|
Escape (0x1b) |
|
Space (0x20) |
|
Octal notation (n being 0-7) |
|
Hexadecimal notation (n being 0-9, a-f, or A-F) |
|
Control-x |
|
Meta-x (c | 0x80) |
|
Meta-Control-x |
|
Character x |
5. Массивы в Ruby
Для создания массива в Ruby – список объектов записывается в между двумя квадратными скобками “[]
” и разделяется запятыми:
#!/usr/bin/env ruby @element1 = 'First element' ary = [ "fred", 10, 3.14, @element1, "This is a string", "last element", ] ary.each do |i| puts i end
Результат:
$ ./array.rb fred 10 3.14 First element This is a string last element
6. Хеши в Ruby
Для создания хеша в Ruby его элементы ключ:значение записываются между парой фигурных скобок “{}
” и разделяются запятыми:
#!/usr/bin/env ruby hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f } hsh.each do |key, value| print key, " is ", value, "n" end
Результат:
$ ./hash.rb red is 3840 green is 240 blue is 15
7. Диапазоны в Ruby
Диапазоны представляют собой последовательность объектов, как правило – чисел. Для создания диапазона можно использовать две точки – “..
“, три – “...
“, либо использовать метод Range.new
.
Диапазоны, созданные с помощью “..
” включают в себя последний элемент диапазона. При использовании трех точек – последний элемент будет отброшен. Т.е. – при записи вида (1..5)
– вы получите значения 1, 2, 3, 4, 5, а при записи вида (1...5)
– только 1, 2 ,3 ,4:
#!/usr/bin/env ruby @range1 = (1..5) @range2 = (1...5) puts "Using double points:" @range1.each do |element| print element, ', ' end puts nil puts "Using triple points:" @range2.each do |element| print element, ', ' end puts nil
Результат:
$ ./range.rb Using double points: 1, 2, 3, 4, 5, Using triple points: 1, 2, 3, 4,
Продолжение – часть 4: операторы.