English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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)が真です。
<=>結合比較演算子。最初の操作数が二番目の操作数と等しい場合に0を返し、最初の操作数が二番目の操作数より大きい場合に 1、最初の操作数が二番目の操作数より小さい場合に0を返します -1。(a <=> b)は返します -1。
===テストに使用されます case 文のwhen節内の等価性(1...10) === 5 trueを返します。
.eql?受け手と引数が同じタイプで同じ値を持っている場合、trueを返します。1 == 1.0はtrueを返しますが、 1.eql?(1.0)はfalseを返します。
equal?受け手と引数が同じオブジェクトIDを持っている場合、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に代入します
+=加および代入演算子、右操作数を左操作数に加えた結果を左操作数に代入しますc += a 相当于 c = c + a
-=減および代入演算子、左操作数から右操作数を引いた結果を左操作数に代入しますc -= a 相当于 c = c - a
*=乗および代入演算子、右操作数を左操作数でかけた結果を左操作数に代入しますc *= a 相当于 c = c * a
/=除および代入演算子、左操作数を右操作数で割った結果を左操作数に代入しますc /= a 相当于 c = c / a
%=求模および代入演算子、2つの操作数の模を左操作数に代入しますc %= a は c = c % a に相当します
**=指数と代入演算子であり、指数計算を実行し、結果を左操作数に代入します。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
~二進位補码演算子は一元演算子であり、"反転"位効果を持っており、0は1、10に変わります。(~a ) は次のように得られます -61、それゆえ 1100 0011、有符号二進数の補码形式です。
<<二進位左シフト演算子です。左操作数の値は右操作数で指定されたビット数だけ左に移動します。a << 2 次のように得られます 240、それゆえ 1111 0000
>>二進位右シフト演算子です。左操作数の値は右操作数で指定されたビット数だけ右に移動します。a >> 2 次のように得られます 15、それゆえ0000 1111

Rubyの論理演算子

以下にRubyがサポートする論理演算子を示します。

変数aの値を仮定します 10、変数bの値は 20、その場合:

演算子説明
and論理与演算子と呼ばれます。二つの操作数がどちらも真の場合、条件は真となります。(a and b) は真です。
or論理或演算子と呼ばれます。二つの操作数のうちどちらかが非ゼロの場合、条件は真となります。(a or b) は真です。
&&論理与演算子と呼ばれます。二つの操作数がどちらも非ゼロの場合、条件は真となります。(a && b) は真です。
||論理或演算子と呼ばれます。二つの操作数のうちどちらかが非ゼロの場合、条件は真となります。(a || b) は真です。
!論理非演算子と呼ばれます。操作数の論理状態を逆転させるために使用されます。条件が真の場合、論理非演算子はそれを偽にします。!(a && b) は偽です。
not論理非演算子と呼ばれます。操作数の論理状態を逆転させるために使用されます。条件が真の場合、論理非演算子はそれを偽にします。not(a && b) は偽です。

Ruby三項演算子

一つ以上の操作が含まれることを三項演算子と呼びます。最初に計算式の真偽値を評価し、その結果に基づいて次の二つの式のうちの一つを実行します。条件演算子の構文は以下の通りです:

演算子説明
? :条件式条件が真である場合 ? 値 X : そうでない場合値 Y

Ruby範囲演算子

Rubyでシーケンス範囲は、連続した値のシリーズを作成するために使用されます。 - 開始値、終了値(状況に応じて)およびそれらの間の値を含みます。

Rubyでは、これらのシーケンスは ".." と "..." 范囲演算子を使用して作成されます。二点形式で作成される範囲は、開始値と終了値を含みますが、三点形式で作成される範囲は、開始値のみを含み、終了値は含まれません。

演算子説明
..開始点から終了点までの範囲を作成します(終了点を含みます)1..10 から作成する 1 まで 10 の範囲
...開始点から終了点までの範囲を作成します(終了点は含まれません)1...10 から作成する 1 まで 9 の範囲

Rubyの defined? 演算子

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

以下は defined? 演算子の様々な使用法です:

使用法 1

defined? variable # variableが初期化されている場合 True

例えば:

foo = 42
defined? foo # => "local"-変数"
defined? $_ # => "global"-変数"
defined? bar # => nil(未定義)

使用法 2

defined? method_call # メソッドが既に定義されている場合 True

例えば:

defined? puts # => "method"
defined? puts(bar) # => nil(ここではbarが未定義)
defined? unpack # => nil(ここでは未定義)

使用法 3

# superがユーザーによって呼び出せるメソッドが存在する場合 True
defined? super

例えば:

defined? super # => "super"(呼び出し可能の場合)
defined? super # => nil(呼び出し不可能の場合)

使用法 4

defined? yield # ブロックが渡された場合 True

例えば:

defined? yield # => "yield"(ブロックが渡された場合)
defined? yield    # => nil(ブロックが渡されていない場合)

Rubyの点演算子 "." と双冒号演算子 "::"

メソッド名の前にクラスまたはモジュール名と . を付けることで、クラスやモジュール内のメソッドを呼び出すことができます。クラスやモジュール名と2つの冒号 :: を使用して、クラスやモジュール内の定数を参照することができます。

:: は一元演算子であり、クラスやモジュール内で定数、サンプルメソッド、クラスメソッドを定義し、クラスやモジュール外からもアクセスできます。

覚えておいてください:Rubyでは、クラスやメソッドも定数として使用できます。

表現の定数名の前にを追加するだけで、必要なものが得られます。 :: 前缀を指定することで、適切なクラスまたはモジュールオブジェクトを返します。

演算子の前の表現がクラスまたはモジュール名の場合、そのクラスまたはモジュール内の対応する定数値を返します。演算子の前に前缀表現がなくなる場合は、Objectメインクラス中の対応する定数値を返します。 。

以下は2つの例です:

MR_COUNT = 0        # Objectメインクラス上に定義された定数
module Foo
  MR_COUNT = 0
  ::MR_COUNT = 1    # グローバルカウントを設定する 1
  MR_COUNT = 2      # ローカルカウントを設定する 2
end
puts MR_COUNT        # これはグローバル定数
puts Foo::MR_COUNT  # これは "Foo" のローカル定数

第2つの例:

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
^ |ビット演算子 XOR、OR
<= < > >=比較演算子
<=> == === != =~ !~等価およびパターンマッチング演算子(!= および !~ はメソッドとして定義できません)

&&論理および

||論理または

.. ...範囲(含む、含まない)

? :三元 if-then-else

= %= { /= -= += |= &= >>= <<= *= &&= ||= **=代入

defined?指定されたシンボルが定義されているかどうかを確認します

not論理否定

or and論理構成

注意:メソッドリストにタグ付けされています の演算子は実際にはメソッドであり、そのためオーバーロードすることができます。