Предыдущая часть — часть 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: операторы.





22 235 views