Последние новости:

Поиск по сайту:

Гвардия сдается, но не умирает (И. Бабель).

Ruby — Операторы

2 мин для чтения
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
21.06.2018
Язык программирования Ruby

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

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

Арифметические операторы Ruby

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

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

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

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

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

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

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

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

Параллельное назначение Ruby

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

a = 10
b = 20
c = 30

 

Это можно более быстро объявить, используя параллельное назначение:

a, b, c = 10, 20, 30

 

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

a, b = b, c

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

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

Предположим, что a = 60; и b = 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
|Двоичный оператор OR копирует бит, если он существует в любом из операндов.(a | b) даст 61, что составляет 0011 1101
^Оператор двоичного XOR копирует бит, если он установлен в один операнд, но не тот и другой.(a ^ b) даст 49, то есть 0011 0001
~Binary Ones Оператор дополнения является унарным и имеет эффект «flipping» бит.(~ a) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за подписанного двоичного числа.
<<Двойной левый оператор сдвига.Значение левых операндов перемещается влево на количество бит, заданных правым операндом.a << 2 даст 240, что составляет 1111 0000
>>Двоичный оператор правого сдвига.Значение левых операндов перемещается вправо на количество бит, заданных правым операндом.a >> 2 даст 15, то есть 0000 1111

Логические операторы в Ruby

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

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

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

Тройной оператор Ruby

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

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

Операторы диапазона в Ruby

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

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

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

Операторы defined? в Ruby

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

Существуют различные варианты оператора defined?

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

defined? variable # True, если переменная инициализирована

 

Например

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

 

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

defined? method_call # True, если определен метод

 

Например

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

 

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

# True, если существует метод, который можно вызвать с помощью super user
defined? super

 

Например

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

 

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

defined? yield   # True, если передан блок кода

 

Например

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

 

Операторы Dot «.» и Double Colon «::» в Ruby

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

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

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

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

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

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

MR_COUNT = 0         # константа определена главным объектом класса
module Foo
   MR_COUNT = 0
   ::MR_COUNT = 1    # установить глобальный счетчик на 1
   MR_COUNT = 2      # установить глобальный счетчик на 2
end
puts MR_COUNT        # это глобальная константа
puts Foo::MR_COUNT   # это местная константа "Foo"

 

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

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

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

методоператорОписание
да::Оператор с постоянным разрешением
да[ ] [ ]=Ссылка на элемент, набор элементов
да**Экспоненциация (повышение до власти)
да! ~ + —Не, дополнение, унарный плюс и минус (имена методов для последних двух — + @ и — @)
да* /%Умножьте, разделите и по модулю
да+ —Сложение и вычитание
да>> <<Правый и левый побитовый сдвиг
да&Побитовое «AND»
да^ |Побитовое эксклюзивное `OR ‘и регулярное` OR’
да<= <>> =Операторы сравнения
да<=> == ===! = = ~ !~Операторы равенства и соответствия шаблонов (! = И! ~ Не могут быть определены как методы)
&&Логический ‘AND’
||Логический ‘OR’
.. …Диапазон (включительно и эксклюзивно)
? :Тройное if-then-else
= %= { /= -= += |= &= >>= <<= *= &&= ||= **=присваивание
defined?Проверьте, установлен ли указанный символ
notЛогическое отрицание
or andЛогическая композиция
Примечание
Операторы с Yes в столбце метода являются фактически методами и как таковые могут быть переопределены.

 

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close