Ruby-演算子

Rubyは、現代語に期待されるように、豊富な演算子のセットをサポートしています。ほとんどの演算子は実際にはメソッド呼び出しです。たとえば、a + bはa。+(b)として解釈されます。ここで、変数aによって参照されるオブジェクトの+メソッドは、bを引数として呼び出されます。

各演算子(+-* /%**&| ^ << >> && ||)には、対応する形式の省略代入演算子(+ =-=など)があります。

Ruby算術演算子

変数aが10を保持し、変数bが20を保持すると仮定すると、−

オペレーター 説明
+ 加算-演算子のいずれかの側に値を加算します。 a + bは30を与えます
減算-左側のオペランドから右側のオペランドを減算します。 a-bは-10を与えます
* 乗算-演算子のいずれかの側で値を乗算します。 a * bは200を与えます
/ 除算-左側のオペランドを右側のオペランドで除算します。 b / aは2を与えます
モジュラス-左側のオペランドを右側のオペランドで除算し、余りを返します。 b%aは0を与えます
**** 指数-演算子に対して指数(累乗)計算を実行します。 a ** bは10の累乗20を与えます

Ruby比較演算子

変数aが10を保持し、変数bが20を保持すると仮定すると、−

オペレーター 説明
== 2つのオペランドの値が等しいかどうかをチェックし、等しい場合は条件が真になります。 (a == b)は真ではありません。
!= 2つのオペランドの値が等しいかどうかをチェックし、値が等しくない場合は条件が真になります。 (a!= b)は真です。
>> 左のオペランドの値が右のオペランドの値より大きいかどうかを確認します。大きい場合は、条件が真になります。 (a> b)は正しくありません。
< 左のオペランドの値が右のオペランドの値よりも小さいかどうかを確認します。小さい場合は、条件が真になります。 (a <b)は真です。
> = 左のオペランドの値が右のオペランドの値以上であるかどうかをチェックします。はいの場合、条件は真になります。 (a> = b)は正しくありません。
<= 左のオペランドの値が右のオペランドの値以下であるかどうかをチェックします。はいの場合、条件は真になります。 (a <= b)は真です。
<=> 結合された比較演算子。最初のオペランドが2番目に等しい場合は0を返し、最初のオペランドが2番目よりも大きい場合は1を返し、最初のオペランドが2番目よりも小さい場合は-1を返します。 (a <=> b)は-1を返します。
=== caseステートメントのwhen句内の同等性をテストするために使用されます。 (1 ... 10)=== 5はtrueを返します。
.eql? レシーバーと引数のタイプが同じで値が等しい場合はTrue。 1 == 1.0はtrueを返しますが、1.eql?(1.0)はfalseです。
等しい? レシーバーと引数のオブジェクトIDが同じ場合はTrue。 aObjがbObjと重複している場合、aObj == bObjは真、a.equal?bObjは偽ですが、a.equal?aObjは真です。

Ruby代入演算子

変数aが10を保持し、変数bが20を保持すると仮定すると、−

オペレーター 説明
= 単純な代入演算子。右側のオペランドから左側のオペランドに値を代入します。 c = a + bは、a + bの値をcに割り当てます
+ = AND代入演算子を追加し、右のオペランドを左のオペランドに追加し、結果を左のオペランドに割り当てます。 c + = aはc = c + aと同等です
-= AND代入演算子を減算し、左オペランドから右オペランドを減算し、結果を左オペランドに割り当てます。 c- = aはc = c-aと同等です
* = AND代入演算子を乗算し、右のオペランドと左のオペランドを乗算して、その結果を左のオペランドに代入します。 c * = aはc = c * aと同等です
/ = AND代入演算子を除算し、左オペランドを右オペランドで除算し、結果を左オペランドに代入します。 c / = aはc = c / aと同等です
%= モジュラスAND代入演算子。2つのオペランドを使用してモジュラスを取り、その結果を左側のオペランドに割り当てます。 c%= aはc = c%aと同等です
** = 指数AND代入演算子。演算子に対して指数(累乗)計算を実行し、左側のオペランドに値を代入します。 c ** = aはc = c ** aと同等です

Ruby並列代入

Rubyは、変数の並列割り当てもサポートしています。これにより、1行のRubyコードで複数の変数を初期化できます。例-

a = 10
b = 20
c = 30

これは、並列割り当てを使用してより迅速に宣言できます-

a, b, c = 10, 20, 30

並列代入は、2つの変数に保持されている値を交換する場合にも役立ちます-

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、つまり00001100になります
| バイナリOR演算子は、いずれかのオペランドに存在する場合、ビットをコピーします。 (a | b)は61を返します。これは00111101です。
^ バイナリXOR演算子は、ビットが両方ではなく一方のオペランドに設定されている場合、そのビットをコピーします。 (a ^ b)は49を返します。これは00110001です。
Binary Ones Complement Operatorは単項であり、ビットを「反転」させる効果があります。 (〜a)は-61を返します。これは、符号付き2進数のため、2の補数形式の11000011です。
<< バイナリ左シフト演算子。左のオペランドの値は、右のオペランドで指定されたビット数だけ左に移動します。 << 2は240、つまり11110000になります
>> バイナリ右シフト演算子。左のオペランドの値は、右のオペランドで指定されたビット数だけ右に移動します。 a >> 2は15、つまり00001111になります

Ruby論理演算子

以下の論理演算子はRuby言語でサポートされています

変数aが10を保持し、変数bが20を保持すると仮定すると、−

オペレーター 説明
そして 論理AND演算子と呼ばれます。両方のオペランドが真の場合、条件は真になります。 (aとb)は真です。
または 論理OR演算子と呼ばれます。2つのオペランドのいずれかがゼロ以外の場合、条件は真になります。 (aまたはb)は真です。
&& 論理AND演算子と呼ばれます。両方のオペランドがゼロ以外の場合、条件は真になります。 (a && b)は真です。
|| 論理OR演算子と呼ばれます。2つのオペランドのいずれかがゼロ以外の場合、条件は真になります。 (a || b)は真です。
論理NOT演算子と呼ばれます。オペランドの論理状態を逆にするために使用します。条件がtrueの場合、LogicalNOT演算子はfalseになります。 !(a && b)はfalseです。
ない 論理NOT演算子と呼ばれます。オペランドの論理状態を逆にするために使用します。条件がtrueの場合、LogicalNOT演算子はfalseになります。 not(a && b)はfalseです。

Ruby三項演算子

三項演算子と呼ばれるもう1つの演算子があります。最初に式の真または偽の値を評価し、次に評価の結果に応じて、指定された2つのステートメントのいずれかを実行します。条件演算子の構文は次のとおりです-

オペレーター 説明
?: 条件式 条件が真の場合?次に値X:それ以外の場合は値Y

Ruby範囲演算子

Rubyのシーケンス範囲は、開始値、終了値、およびその間の値の範囲で構成される、連続する値の範囲を作成するために使用されます。

Rubyでは、これらのシーケンスは「..」および「...」範囲演算子を使用して作成されます。2ドット形式は包括的範囲を作成し、3ドット形式は指定された高い値を除外する範囲を作成します。

オペレーター 説明
.. 始点から終点までの範囲を作成します。 1..101から10までの範囲を作成します。
..。 始点から終点までの範囲を排他的に作成します。 1 ... 101から9までの範囲を作成します。

Rubyは定義されていますか?演算子

定義されていますか?は、渡された式が定義されているかどうかを判別するためのメソッド呼び出しの形式をとる特別な演算子です。式の説明文字列を返します。式が定義されていない場合はnilを返します。

定義されたのさまざまな使用法がありますか?オペレーター

使用法1

defined? variable # True if variable is initialized

For Example

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

使用法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)

使用法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)

使用法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)

ルビードット「。」およびダブルコロン "::"演算子

モジュールの名前の前にモジュールの名前とピリオドを付けてモジュールメソッドを呼び出し、モジュール名と2つのコロンを使用して定数を参照します。

ザ・ :: は、クラスまたはモジュール内で定義された定数、インスタンスメソッド、およびクラスメソッドを、クラスまたはモジュールの外部のどこからでもアクセスできるようにする単項演算子です。

Remember Rubyでは、クラスとメソッドも定数と見なされる場合があります。

プレフィックスを付ける必要があります :: 適切なクラスまたはモジュールオブジェクトを返す式を持つConst_name。

プレフィックス式が使用されていない場合、デフォルトでメインのObjectクラスが使用されます。

ここに2つの例があります-

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

Ruby演算子の優先順位

次の表に、すべての演算子を優先順位の高いものから低いものの順に示します。

方法 オペレーター 説明
はい ::: 一定の解像度の演算子
はい [] [] = 要素参照、要素セット
はい **** べき乗(累乗)
はい !〜+- Not、complement、unary plus andminus(最後の2つのメソッド名は+ @と-@です)
はい * /% 乗算、除算、モジュロ
はい +- 足し算と引き算
はい >> << 左右のビット単位のシフト
はい ビット単位の「AND」
はい ^ | ビット単位の排他的論理和と通常の論理和
はい <= <>> = 比較演算子
はい <=> == ===!= =〜!〜 等式およびパターン一致演算子(!=および!〜はメソッドとして定義されない場合があります)
  && 論理積「AND」
  || 論理「OR」
  ....。 範囲(包括的および排他的)
  ?: 三項if-then-else
  =%= {/ =-= + = | =&= >> = << = * = && = || = ** = 割り当て
  定義されていますか? 指定されたシンボルが定義されているかどうかを確認してください
  ない 論理否定
  または 論理構成

NOTE−メソッド列に「はい」が付いている演算子は実際にはメソッドであるため、オーバーライドされる場合があります。