Ruby - operatory

Ruby obsługuje bogaty zestaw operatorów, czego można się spodziewać po nowoczesnym języku. Większość operatorów to w rzeczywistości wywołania metod. Na przykład a + b jest interpretowane jako a. + (B), gdzie metoda + w obiekcie, do którego odwołuje się zmienna a, jest wywoływana z b jako argumentem.

Dla każdego operatora (+ - * /% ** & | ^ << >> && ||) istnieje odpowiednia forma skróconego operatora przypisania (+ = - = itd.).

Operatory arytmetyczne Ruby

Załóżmy, że zmienna a zawiera 10, a zmienna b 20, a następnie -

Operator Opis Przykład
+ Dodawanie - dodaje wartości po obu stronach operatora. a + b da 30
- Odejmowanie - odejmuje operand prawej ręki od operandu lewej ręki. a - b da -10
* Mnożenie - mnoży wartości po obu stronach operatora. a * b da 200
/ Dzielenie - dzieli operand lewej ręki przez operand prawej ręki. b / a da 2
% Moduł - dzieli operand lewej ręki przez operand prawej ręki i zwraca resztę. b% a da 0
** Wykładnik - wykonuje obliczenia wykładnicze (potęgowe) na operatorach. a ** b da 10 do potęgi 20

Operatory porównania Ruby

Załóżmy, że zmienna a zawiera 10, a zmienna b 20, a następnie -

Operator Opis Przykład
== Sprawdza, czy wartości dwóch operandów są równe, czy nie, jeśli tak, warunek staje się prawdziwy. (a == b) nie jest prawdą.
! = Sprawdza, czy wartości dwóch operandów są równe, czy nie, jeśli wartości nie są równe, warunek staje się prawdziwy. (a! = b) jest prawdą.
> Sprawdza, czy wartość lewego operandu jest większa niż wartość prawego operandu. Jeśli tak, warunek staje się prawdziwy. (a> b) nie jest prawdą.
< Sprawdza, czy wartość lewego operandu jest mniejsza niż wartość prawego operandu, jeśli tak, warunek staje się prawdziwy. (a <b) jest prawdą.
> = Sprawdza, czy wartość lewego operandu jest większa lub równa wartości prawego operandu, jeśli tak, warunek staje się prawdziwy. (a> = b) nie jest prawdą.
<= Sprawdza, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu, jeśli tak, warunek staje się prawdziwy. (a <= b) jest prawdą.
<=> Połączony operator porównania. Zwraca 0, jeśli pierwszy operand jest równy drugiemu, 1, jeśli pierwszy operand jest większy niż drugi, i -1, jeśli pierwszy operand jest mniejszy niż drugi. (a <=> b) zwraca -1.
=== Służy do testowania równości w klauzuli when instrukcji case . (1 ... 10) === 5 zwraca prawdę.
.eql? Prawda, jeśli odbiorca i argument mają ten sam typ i równe wartości. 1 == 1.0 zwraca prawdę, ale 1.eql? (1.0) jest fałszem.
równy? Prawda, jeśli odbiorca i argument mają ten sam identyfikator obiektu. jeśli aObj jest duplikatem bObj, to aObj == bObj jest prawdziwe, a.equal? ​​bObj jest fałszem, ale a.equal? ​​aObj jest prawdziwe.

Operatory przypisania Ruby

Załóżmy, że zmienna a zawiera 10, a zmienna b 20, a następnie -

Operator Opis Przykład
= Prosty operator przypisania, przypisuje wartości z operandów po prawej stronie do operandów po lewej stronie. c = a + b przypisze wartość a + b do c
+ = Dodaj operator przypisania AND, dodaje prawy operand do lewego operandu i przypisuje wynik do lewego operandu. c + = a jest równoważne c = c + a
- = Operator odejmowania AND przypisania, odejmuje prawy operand od lewego operandu i przypisuje wynik do lewego operandu. c - = a jest równoważne c = c - a
* = Operator przypisania mnożenia AND, mnoży prawy operand przez lewy operand i przypisuje wynik do lewego operandu. c * = a jest równoważne c = c * a
/ = Operator przypisania dzielenia AND, dzieli lewy operand z prawym operandem i przypisuje wynik do lewego operandu. c / = a jest równoważne c = c / a
% = Operator przypisania modułu AND, przyjmuje moduł przy użyciu dwóch operandów i przypisuje wynik lewemu operandowi. c% = a jest równoważne c = c% a
** = Operator przypisania wykładnika AND, wykonuje obliczenia wykładnicze (potęgowe) na operatorach i przypisuje wartość do lewego operandu. c ** = a jest równoważne c = c ** a

Przypisanie równoległe w Rubim

Ruby obsługuje również równoległe przypisywanie zmiennych. Umożliwia to zainicjowanie wielu zmiennych za pomocą jednej linii kodu Rubiego. Na przykład -

a = 10
b = 20
c = 30

Można to szybciej zadeklarować za pomocą przypisania równoległego -

a, b, c = 10, 20, 30

Przypisanie równoległe jest również przydatne do zamiany wartości przechowywanych w dwóch zmiennych -

a, b = b, c

Operatory bitowe Ruby

Operator bitowy działa na bitach i wykonuje operacje bit po bicie.

Załóżmy, że a = 60; i b = 13; teraz w formacie binarnym będą wyglądać następująco -

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

Poniższe operatory bitowe są obsługiwane przez język Ruby.

Operator Opis Przykład
& Operator binarny AND kopiuje trochę do wyniku, jeśli istnieje w obu operandach. (a & b) da 12, czyli 0000 1100
| Operator binarny OR kopiuje bit, jeśli istnieje w którymkolwiek operandzie. (a | b) da 61, czyli 0011 1101
^ Binarny operator XOR kopiuje bit, jeśli jest ustawiony w jednym operandzie, ale nie w obu. (a ^ b) da 49, czyli 0011 0001
~ Operator dopełniacza binarnego jest jednoargumentowy i powoduje „odwracanie” bitów. (~ a) da -61, czyli 1100 0011 w postaci uzupełnienia do 2 ze względu na liczbę binarną ze znakiem.
<< Binarny operator przesunięcia w lewo. Wartość lewego operandu jest przesuwana w lewo o liczbę bitów określoną przez prawy operand. a << 2 da 240, czyli 1111 0000
>> Binarny operator przesunięcia w prawo. Wartość lewego operandu jest przesuwana w prawo o liczbę bitów określoną przez prawy operand. a >> 2 da 15, czyli 0000 1111

Operatory logiczne Ruby

Poniższe operatory logiczne są obsługiwane przez język Ruby

Załóżmy, że zmienna a zawiera 10, a zmienna b 20, a następnie -

Operator Opis Przykład
i Nazywany operatorem logicznym AND. Jeśli oba operandy są prawdziwe, warunek staje się prawdziwy. (a i b) jest prawdą.
lub Nazywany operatorem logicznym OR. Jeśli którykolwiek z dwóch operandów jest niezerowy, warunek staje się prawdziwy. (a lub b) jest prawdą.
&& Nazywany operatorem logicznym AND. Jeśli oba operandy są niezerowe, warunek staje się prawdziwy. (a && b) jest prawdą.
|| Nazywany operatorem logicznym OR. Jeśli którykolwiek z dwóch operandów jest niezerowy, warunek staje się prawdziwy. (a || b) jest prawdą.
! Nazywany operatorem logicznym NOT. Służy do odwracania stanu logicznego operandu. Jeśli warunek jest spełniony, operator logiczny NOT spowoduje fałsz. ! (a && b) jest fałszem.
nie Nazywany operatorem logicznym NOT. Służy do odwracania stanu logicznego operandu. Jeśli warunek jest spełniony, operator logiczny NOT spowoduje fałsz. not (a && b) jest fałszem.

Rubinowy operator potrójny

Jest jeszcze jeden operator o nazwie Operator trójargumentowy. Najpierw ocenia wyrażenie dla wartości prawdziwej lub fałszywej, a następnie wykonuje jedną z dwóch podanych instrukcji w zależności od wyniku oceny. Operator warunkowy ma następującą składnię -

Operator Opis Przykład
? : Wyrażenie warunkowe Jeśli warunek jest prawdziwy? Wtedy wartość X: W przeciwnym razie wartość Y

Operatory Ruby Range

Zakresy sekwencji w Rubim są używane do tworzenia zakresu kolejnych wartości - składających się z wartości początkowej, końcowej i zakresu wartości pomiędzy nimi.

W Rubim sekwencje te są tworzone przy użyciu operatorów zakresu „..” i „…”. Forma z dwiema kropkami tworzy zakres obejmujący, a forma z trzema kropkami tworzy zakres, który wyklucza określoną wysoką wartość.

Operator Opis Przykład
.. Tworzy zakres od punktu początkowego do końcowego włącznie. 1..10 Tworzy zakres od 1 do 10 włącznie.
... Tworzy wyłączny zakres od punktu początkowego do końcowego. 1 ... 10 Tworzy zakres od 1 do 9.

Definicja Rubiego? Operatorzy

zdefiniowane? jest operatorem specjalnym, który przyjmuje postać wywołania metody w celu określenia, czy przekazane wyrażenie jest zdefiniowane, czy nie. Zwraca ciąg opisu wyrażenia lub nil, jeśli wyrażenie nie jest zdefiniowane.

Istnieją różne zastosowania zdefiniowanych? Operator

Użycie 1

defined? variable # True if variable is initialized

For Example

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

Użycie 2

defined? method_call # True if a method is defined

For Example

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

Użytkowanie 3

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

For Example

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

Użytkowanie 4

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

For Example

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

Rubinowa kropka "." i dwukropek „::” Operatory

Wywołujesz metodę modułu, poprzedzając jej nazwę nazwą modułu i kropką, a odwołujesz się do stałej przy użyciu nazwy modułu i dwóch dwukropków.

Plik :: jest operatorem jednoargumentowym, który umożliwia dostęp do: stałych, metod instancji i metod klas zdefiniowanych w klasie lub module z dowolnego miejsca spoza klasy lub modułu.

Remember w Rubim, klasy i metody również mogą być uważane za stałe.

Musisz tylko przedrostek :: Const_name z wyrażeniem, które zwraca odpowiednią klasę lub obiekt modułu.

Jeśli nie jest używane żadne wyrażenie przedrostkowe, domyślnie używana jest główna klasa Object.

Oto dwa przykłady -

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

Second Example

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

Pierwszeństwo operatorów rubinowych

W poniższej tabeli wymieniono wszystkie operatory od najwyższego do najniższego priorytetu.

metoda Operator Opis
tak :: Operator stałej rozdzielczości
tak [] [] = Odniesienie do elementu, zestaw elementów
tak ** Potęgowanie (podniesienie do potęgi)
tak ! ~ + - Nie, uzupełnienie, jednoargumentowy plus i minus (nazwy metod dla ostatnich dwóch to + @ i - @)
tak * /% Mnożenie, dzielenie i modulo
tak + - Dodawanie i odejmowanie
tak >> << Przesunięcie bitowe w prawo iw lewo
tak & Bitowe „AND”
tak ^ | Wyłączne bitowo „OR” i zwykłe „OR”
tak <= <>> = Operatory porównania
tak <=> == ===! = = ~! ~ Operatory równości i dopasowania do wzorca (! = I! ~ Nie mogą być zdefiniowane jako metody)
  && Logiczne „AND”
  || Logiczne „LUB”
  ... ... Zakres (włącznie i wyłączność)
  ? : Potrójny jeśli-to-jeszcze
  =% = {/ = - = + = | = & = >> = << = * = && = || = ** = Zadanie
  zdefiniowane? Sprawdź, czy określony symbol został zdefiniowany
  nie Logiczna negacja
  albo i Logiczna kompozycja

NOTE- Operatory z wartością Tak w kolumnie metody są w rzeczywistości metodami i jako takie mogą zostać zastąpione.