Предыдущая часть – часть 3: переменные, константы и литералы.
Содержание
Арифметрические операторы Ruby
Предположим, что переменная a == 10
, а переменная b == 20
.
Оператор |
Описание |
Пример |
|
сложение |
a + b вернет 30 |
|
вычитание |
a – b вернет -10 |
|
умножение |
a * b вернет 200 |
|
деление |
b / a вернет 2 |
|
деление по модулю |
b % a вернет 0 |
|
возведение в степень |
a**b вернет 10 в степени 20 |
Операторы сравнения
Оператор |
Описание |
Пример |
|
|
(a == b) is not true. |
|
|
(a != b) is true. |
|
|
(a > b) is not true. |
|
|
(a < b) is true. |
|
|
(a >= b) is not true. |
|
|
(a <= b) is true. |
|
Комбинированный оператор сравнения. Возвращает 0, если операнд слева равен операнду справа, 1 – если операнд слева больше, и -1 – если он меньше. |
(a <=> b) returns -1. |
|
Used to test equality within a when clause of a case statement. |
(1…10) === 5 returns true. |
|
|
1 == 1.0 returns true, but 1.eql?(1.0) is false. |
|
|
if aObj is duplicate of bObj then aObj == bObj is true, a.equal?bObj is false but a.equal?aObj is true. |
Операторы присваивания
Оператор |
Описание |
Пример |
|
Присваивает значение справа операнду слева. |
c = a + b will assigne value of a + b into c |
|
Присваивает операнд справа операнду слева, и результат присваивает левому операнду. |
c += a is equivalent to c = c + a |
|
Вычитает операнд справа от операнда слева, и результат присваивает левому операнду. |
c -= a is equivalent to c = c – a |
|
Аналогично, с умножением. |
c *= a is equivalent to c = c * a |
|
Аналогично, с делением. |
c /= a is equivalent to c = c / a |
|
Аналогично, с делением по модулю. |
c %= a is equivalent to c = c % a |
|
Аналогично, с с возведением в степень. |
c **= a is equivalent to c = c ** a |
Операторы параллельного присваивания
Ruby позволяет инициализировать несколько переменных в одну строк.
Например, код:
a = 10 b = 20 c = 30
можно записать в таком виде:
a, b, c = 10, 20, 30
Кроме того – таким образом можно присвоить значение одной переменной – другой:
a, b = b, c
Логические операторы Ruby
Оператор |
Описание |
Пример |
|
Логический опратор “И” (AND). True, если оба значения равны. |
(a and b) is true. |
|
Логический опратор “ИЛИ” (OR). True, если одно из значений не ноль. |
(a or b) is true. |
|
Логический опратор “И” (AND). True, если оба операнда не ноль. |
(a && b) is true. |
|
Логический опратор “ИЛИ” (OR). True, если хотя бы один из операндов не ноль. |
(a || b) is true. |
|
Логический опратор “НЕТ” (NOT). Если выражение возвращает True – то оператор ! вернет False. |
!(a && b) is false. |
|
Аналогично. |
not(a && b) is false. |
Тернарный (условный) оператор в Ruby
В Ruby имеется специальный “тройной” (лат. ternarius — «тройной») оператор, который проверяет является ли условие истиной, а потом выполняет одно или два заданных действия, в зависимости от результата проверки.
Его синтаксис выглядит так:
Оператор |
Описание |
Пример |
|
условное выражение |
Если выражение |
Операторы диапазона
Операторы диапазона последовательностей (range operators) используются для создания последовательности значение.
В Ruby для этой цели имеются операторы “..
” и “...
“. При использовании “..
” – в перечисление не будет включен последний элемент этой последовательности, а при использовании “...
” – будет.
Оператор |
Описание |
Пример |
|
Создает диапазон, включающий последнее значение |
1..10 Creates a range from 1 to 10 inclusive |
|
Создает диапазон, исключающий последнее значение |
1…10 Creates a range from 1 to 9 |
Оператор defined?
defined?
– специальный оператор в Ruby, который используется проверки переданного ему выражения.
Пример 1
defined? variable # True если переменная проиницилизирована
irb(main):001:0> foo = 42 => 42 irb(main):002:0> defined? foo => "local-variable" irb(main):003:0> defined? $_ => "global-variable" irb(main):004:0> defined? bar => nil
Пример 2
defined? method_call # True если метод существует
irb(main):005:0> defined? puts => "method" irb(main):006:0> defined? puts(bar) => nil irb(main):007:0> defined? unpack => nil
Ruby операторы “.” и “::”
Вы можете обратиться к методу модуля с помощью оператора “.
“, а к константе – с помощью двойного двоеточия “::
“.
“::
” является унарным оператором, который позволяет вызвать константу, метод инстанса или класса из другого модуля или класса.
Пример 1
#!/usr/bin/env ruby -w MR_COUNT = 0 # определяем константу класса Object module Foo MR_COUNT = 0 ::MR_COUNT = 1 # меняем значение глобальной константы == 1 MR_COUNT = 2 # меняем значение локальной константы == 1 end puts "Global: #{MR_COUNT}" # значение глобальной константы puts "Lolcal: #{Foo::MR_COUNT}" # значение локальной константы
Результат:
$ ./dd.rb ./dd.rb:7: warning: already initialized constant MR_COUNT ./dd.rb:3: warning: previous definition of MR_COUNT was here ./dd.rb:8: warning: already initialized constant Foo::MR_COUNT ./dd.rb:6: warning: previous definition of MR_COUNT was here Global: 1 Lolcal: 2
Пример 2
#!/usr/bin/env ruby CONST = ' out there' class Inside_one CONST = proc {' in there'} def where_is_my_CONST ::CONST + ' inside one' end end class Inside_two CONST = ' inside two' def where_is_my_CONST CONST end end puts Inside_one.new.where_is_my_CONST puts Inside_two.new.where_is_my_CONST puts Object::CONST + Inside_two::CONST puts Inside_two::CONST + CONST puts Inside_one::CONST puts Inside_one::CONST.call + Inside_two::CONST
Результат:
$ ./colon2.rb out there inside one inside two out there inside two inside two out there #<Proc:0x007f9be60aac38@./colon2.rb:6> in there inside two
Старшинство операторов в Ruby
Список ниже приводит список всех операторов в порядке их старшинства:
Method |
Оператор |
Описание |
Yes |
|
Constant resolution operator |
Yes |
|
Element reference, element set |
Yes |
|
Exponentiation (raise to the power) |
Yes |
|
Not, complement, unary plus and minus (method names for the last two are +@ and -@) |
Yes |
|
Multiply, divide, and modulo |
Yes |
|
Addition and subtraction |
Yes |
|
Right and left bitwise shift |
Yes |
|
Bitwise ‘AND’ |
Yes |
|
Bitwise exclusive `OR’ and regular `OR’ |
Yes |
|
Comparison operators |
Yes |
|
Equality and pattern match operators (!= and !~ may not be defined as methods) |
|
Logical ‘AND’ |
|
|
Logical ‘OR’ |
|
|
Range (inclusive and exclusive) |
|
|
Ternary if-then-else |
|
|
Assignment |
|
|
Check if specified symbol defined |
|
|
Logical negation |
|
|
Logical composition |
Операторы, для которых указан “Yes” в колонке “Method” являются методами, и могут быть переопределены.
Продолжение – часть 5: комментарии.