Учебники

Руби — Операторы

Ruby поддерживает широкий набор операторов, как и следовало ожидать от современного языка. Большинство операторов на самом деле являются вызовами методов. Например, a + b интерпретируется как a. + (B), где метод + в объекте, на который ссылается переменная a, вызывается с b в качестве аргумента.

Для каждого оператора (+ — * /% ** & | ^ << >> && ||) существует соответствующая форма сокращенного оператора присваивания (+ = — = и т. Д.).

Рубиновые арифметические операторы

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

оператор Описание пример
+ Добавление — добавляет значения по обе стороны от оператора. а + б даст 30
Вычитание — вычитает правый операнд из левого операнда. а — б даст -10
* Умножение — Умножает значения по обе стороны от оператора. а * б даст 200
/ Деление — делит левый операнд на правый. б / у даст 2
% Модуль — Делит левый операнд на правый операнд и возвращает остаток. б% а даст 0
** Экспонент — Выполняет экспоненциальный (силовой) расчет операторов. а ** б даст 10 к силе 20

Операторы сравнения Ruby

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

оператор Описание пример
== Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. (a == b) не соответствует действительности.
знак равно Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (a! = b) верно.
> Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (а> б) не соответствует действительности.
< Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (а <б) верно.
> = Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (a> = b) не соответствует действительности.
<= Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (a <= b) верно.
<=> Комбинированный оператор сравнения. Возвращает 0, если первый операнд равен второму, 1, если первый операнд больше второго, и -1, если первый операнд меньше второго. (<=> б) возвращает -1.
=== Используется для проверки равенства в предложении when оператора case . (1 … 10) === 5 возвращает true.
.eql? True, если получатель и аргумент имеют одинаковый тип и одинаковые значения. 1 == 1.0 возвращает true, а 1.eql? (1.0) — false.
равны? True, если получатель и аргумент имеют одинаковый идентификатор объекта. если aObj является дубликатом bObj, то aObj == bObj имеет значение true, a.equal? ​​bObj имеет значение false, а a.equal? ​​aObj имеет значение true.

Операторы присваивания Ruby

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

оператор Описание пример
знак равно Простой оператор присваивания, присваивает значения из правого операнда левому операнду. c = a + b назначит значение a + b в c
+ = Добавить оператор присваивания AND, добавляет правый операнд в левый операнд и присваивает результат левому операнду. с + = а эквивалентно с = с + а
знак равно Вычитание И оператор присваивания, вычитает правый операнд из левого операнда и присваивает результат левому операнду. с — = а эквивалентно с = с — а
знак равно Оператор присваивания умножения И, умножает правый операнд на левый операнд и присваивает результат левому операнду. с * = а эквивалентно с = с * а
знак равно Оператор деления И присваивания, делит левый операнд на правый операнд и присваивает результат левому операнду. с / = а эквивалентно с = с / а
знак равно Оператор присваивания модуля И, принимает модуль с использованием двух операндов и присваивает результат левому операнду. с% = а эквивалентно с = с% а
знак равно Оператор присваивания экспоненты AND выполняет экспоненциальный (силовой) расчет операторов и присваивает значение левому операнду. с ** = а эквивалентно с = с ** а

Ruby Parallel Assignment

Ruby также поддерживает параллельное назначение переменных. Это позволяет инициализировать несколько переменных одной строкой кода Ruby. Например —

a = 10
b = 20
c = 30

Это может быть объявлено быстрее с использованием параллельного присваивания —

a, b, c = 10, 20, 30

Параллельное назначение также полезно для замены значений, содержащихся в двух переменных:

a, b = b, c

Рубиновые побитовые операторы

Побитовый оператор работает с битами и выполняет побитовую операцию.

Предположим, если а = 60; и б = 13; теперь в двоичном формате они будут выглядеть следующим образом —

 a    =  0011 1100
 b    =  0000 1101
 ------------------
 a&b  =  0000 1100
 a|b  =  0011 1101
 a^b  =  0011 0001
 ~a   =  1100 0011

Следующие побитовые операторы поддерживаются языком Ruby.

оператор Описание пример
& Двоичный оператор AND немного копирует результат, если он существует в обоих операндах. (a & b) даст 12, что составляет 0000 1100
| Оператор двоичного ИЛИ копирует немного, если он существует в любом из операндов. (a | b) даст 61, что составляет 0011 1101
^ Двоичный оператор XOR копирует бит, если он установлен в одном операнде, но не в обоих. (a ^ b) даст 49, что составляет 0011 0001
~ Оператор дополнения двоичных единиц является унарным и имеет эффект «переворачивания» битов. (~ a) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за двоичного числа со знаком.
<< Двоичный оператор левого сдвига. Значение левого операнда перемещается влево на количество битов, указанное правым операндом. << 2 даст 240, что составляет 1111 0000
>> Оператор двоичного правого сдвига. Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. a >> 2 даст 15, что составляет 0000 1111

Рубиновые логические операторы

Следующие логические операторы поддерживаются языком Ruby

Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —

оператор Описание пример
а также Называется логический оператор И. Если оба операнда верны, то условие становится истинным. (а и б) верно.
или же Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным. (а или б) верно.
&& Называется логический оператор И. Если оба операнда отличны от нуля, условие становится истинным. (a && b) верно.
|| Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным. (a || b) верно.
! Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. ! (a && b) ложно.
не Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. не (a && b) является ложным.

Рубин Тернарный Оператор

Еще один оператор называется Ternary Operator. Сначала он оценивает выражение для истинного или ложного значения, а затем выполняет одно из двух заданных утверждений в зависимости от результата оценки. Условный оператор имеет такой синтаксис —

оператор Описание пример
? : Условное выражение Если условие верно? Тогда значение X: в противном случае значение Y

Операторы Рубинового Диапазона

Диапазоны последовательностей в Ruby используются для создания диапазона последовательных значений, состоящего из начального значения, конечного значения и диапазона значений между ними.

В Ruby эти последовательности создаются с использованием операторов диапазона «..» и «…». Форма с двумя точками создает включающий диапазон, а форма с тремя точками создает диапазон, который исключает указанное высокое значение.

оператор Описание пример
.. Создает диапазон от начальной точки до конечной точки включительно. 1..10 Создает диапазон от 1 до 10 включительно.
Создает диапазон от начальной точки до эксклюзивной конечной точки. 1 … 10 Создает диапазон от 1 до 9.

Рубин определен? операторы

определены? это специальный оператор, который принимает форму вызова метода, чтобы определить, определено ли переданное выражение. Возвращает строку описания выражения или nil, если выражение не определено.

Есть различное использование определенных? оператор

Использование 1

defined? variable # True if variable is initialized

Например

foo = 42
defined? foo    # => "local-variable"
defined? $_     # => "global-variable"
defined? bar    # => nil (undefined)

Использование 2

defined? method_call # True if a method is defined

Например

defined? puts        # => "method"
defined? puts(bar)   # => nil (bar is not defined here)
defined? unpack      # => nil (not defined here)

Использование 3

# True if a method exists that can be called with super user
defined? super

Например

defined? super     # => "super" (if it can be called)
defined? super     # => nil (if it cannot be)

Использование 4

defined? yield   # True if a code block has been passed

Например

defined? yield    # => "yield" (if there is a block passed)
defined? yield    # => nil (if there is no block)

Руби Дот «.» и двойные двоеточия «::» Операторы

Вы вызываете метод модуля, предшествуя его имени именем модуля и точкой, и вы ссылаетесь на константу, используя имя модуля и два двоеточия.

:: является унарным оператором, который позволяет: константы, методы экземпляра и методы класса, определенные в классе или модуле, доступны из любого места вне класса или модуля.

Помните, в Ruby классы и методы тоже можно считать константами.

Вам просто нужно добавить префикс :: Const_name к выражению, которое возвращает соответствующий класс или объект модуля.

Если префиксное выражение не используется, основной класс Object используется по умолчанию.

Вот два примера —

MR_COUNT = 0         # constant defined on main Object class
module Foo
   MR_COUNT = 0
   ::MR_COUNT = 1    # set global count to 1
   MR_COUNT = 2      # set local count to 2
end
puts MR_COUNT        # this is the global constant
puts Foo::MR_COUNT   # this is the local "Foo" constant

Второй пример

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

Приоритет операторов Ruby

В следующей таблице перечислены все операторы от наивысшего приоритета к низшему.

метод оператор Описание
да :: Оператор с постоянным разрешением
да знак равно Ссылка на элемент, набор элементов
да ** Возведение в степень (возведение к власти)
да ! ~ + — Не, дополнение, унарный плюс и минус (имена методов для двух последних: + @ и — @)
да * /% Умножить, разделить и по модулю
да + — Сложение и вычитание
да >> << Сдвиг вправо и влево
да & Побитовое И
да ^ | Побитовое исключающее `ИЛИ ‘и регулярное` ИЛИ’
да <= <>> = Операторы сравнения
да <=> == ===! = = ~! ~ Операторы равенства и сопоставления с образцом (! = И! ~ Не могут быть определены как методы)
&& Логическое «И»
|| Логическое «ИЛИ»
.. … Ассортимент (включительно и эксклюзивно)
? : Троичный если-то-еще
=% = {/ = — = + = | = & = >> = << = * = && = || = ** = присваивание
определены? Проверьте, определен ли указанный символ
не Логическое отрицание
или и Логическая композиция

ПРИМЕЧАНИЕ. — Операторы, для которых в столбце «метод» указано « Да», на самом деле являются методами и могут быть переопределены.