Ruby 演算子
Ruby は豊富な演算子のセットをサポートしています。ほとんどの演算子は実際にはメソッド呼び出しです。たとえば、a + b は a.+(b) として解釈されます。この場合、変数 a を指す + メソッドは、メソッド呼び出しの引数として b を指定して呼び出されます。
各演算子 (+ - * / % ** & | ^ << >> && ||) には、対応する省略された代入演算子 (+= -= など) があります。
Ruby 算術演算子
変数 a の値が 10、変数 b の値が 20 であるとします。
演算子 | 説明 | 例 |
---|---|---|
+ | Add ition - 操作の追加シンボルの両側のオペランド | 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 つの演算をチェックするかどうか数値の値が等しい場合、条件は true です。 | (a == b) は真実ではありません。 |
!= | は、2 つのオペランドの値が等しいかどうかをチェックし、そうでない場合は条件が true です。 | (a != b) は true です。 |
> | 左のオペランドの値が右のオペランドの値より大きいかどうかを確認し、大きい場合は条件が true です。 | (a > b) は真実ではありません。 |
< | 左のオペランドの値が右のオペランドの値より小さいかどうかを確認し、そうであれば条件は true です。 | (a < b) は true です。 |
>= | 左のオペランドの値が右のオペランドの値以上であるかどうかを確認し、そうであれば条件が true です。 | (a >= b) は真実ではありません。 |
<= | 左のオペランドの値が右のオペランドの値以下であるかどうかを確認し、そうであれば条件は true です。 | (a <= b) は true です。 |
<=> | 共用体比較演算子。最初のオペランドが 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 を返します。 |
equal? | 受信者とパラメータが同じオブジェクトIDを持つ場合にtrueを返します。 | aObj が bObj のコピーの場合、aObj == bObj は true を返し、a.equal?bObj は false を返しますが、a.equal?aObj は true を返します。 |
Ruby 代入演算子
変数 a の値が 10、変数 b の値が 20 であると仮定すると、次のようになります。右オペランドの値を左オペランドに代入します
+= | 加算と代入演算子で、右オペランドを左オペランドに加算します。オペランドは左オペランド | 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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
と同等です。 |
演算子 | 説明 | 例 |
---|---|---|
& | バイナリ AND 演算子は、両方のオペランドに存在する場合、結果に 1 ビットをコピーします。 | (a & b) は 12、つまり 0000 1100 を返します |
| | どちらかのオペランドに存在する場合、バイナリ OR 演算子は結果に 1 ビットをコピーします。 | (a | b) は、0011 1101 である 61 を取得します |
^ | オペランドの 1 つに存在し、両方に存在しない場合、バイナリ XOR 演算子は 1 ビットを結果にコピーします。 | (a ^ b) は 49 を返します。これは 0011 0001 です |
~ | 2 の補数演算子は、ビットを「反転」する効果がある単項演算子です。 | (~a ) は -61 を返します。これは 1100 0011、2 の補数、符号付き 2 進数です。 |
<< | 二項左シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ左にシフトされます。 | a << 2 は 240 を取得します。これは 1111 0000 です |
>> | 2 項右シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ右にシフトされます。 | a >> 2 は 15、つまり 0000 1111 になります |
Ruby 論理演算子
次の表は、Ruby でサポートされている論理演算子のリストです。
変数 a の値が 10、変数 b の値が 20 であるとします。
演算子 | 説明 | 例 |
---|---|---|
and | は、論理 AND 演算子と呼ばれます。両方のオペランドが true の場合、条件は true になります。 | (a と b) は true です。 |
or | は論理OR演算子と呼ばれます。 2 つのオペランドのいずれかが 0 以外の場合、条件は true になります。 | (a または b) は true です。 |
&& | は論理AND演算子と呼ばれます。両方のオペランドがゼロ以外の場合、条件は真となります。 | (a && b) は true です。 |
|| | は論理OR演算子と呼ばれます。 2 つのオペランドのいずれかが 0 以外の場合、条件は true になります。 | (a || b) は true です。 |
! | は論理否定演算子と呼ばれます。オペランドの論理状態を反転するために使用されます。論理 NOT 演算子は、条件が true の場合、条件を false にします。 | !(a && b) は false です。 |
not | は論理否定演算子と呼ばれます。オペランドの論理状態を反転するために使用されます。論理 NOT 演算子は、条件が true の場合、条件を false にします。 | not(a && b) は false です。 |
Ruby 三項演算子
三項演算子と呼ばれる演算は複数あります。最初のステートメントは、式の true または false の値を計算し、この結果に基づいて次の 2 つのステートメントのいずれかを実行するかを決定します。条件演算子の構文は次のとおりです:
Operator | Description | Instance |
---|---|---|
? : | 条件式 | 条件が true の場合、値は X です。 Y |
Ruby 範囲演算子
Ruby では、シーケンス範囲は、開始値、終了値 (必要に応じて)、およびそれらの間の値を含む連続する値のシーケンスを作成するために使用されます。
Ruby では、これらのシーケンスは「..」および「...」範囲演算子を使用して作成されます。 2 点形式で作成される範囲には開始値と終了値が含まれますが、3 点形式で作成される範囲には開始値のみが含まれ、終了値は含まれません。
演算子 | 説明 | インスタンス |
---|---|---|
... | 始点から終点までの範囲を作成します(両端を含む) | 1..10 1から10までの範囲を作成します |
。 .. | 始点から終点までの範囲を作成(終点を除く) | 1...10 1から9までの範囲を作成 |
Ruby 定義? 演算子
定義? は、渡された式がメソッド呼び出しの形式で定義されているかどうかを判断する特別な演算子です。式を説明する文字列を返します。式が未定義の場合は nil を返します。
定義された?演算子のさまざまな使用法を次に示します:
使用法 1
defined? variable # 如果 variable 已经初始化,则为 True
例:
foo = 42 defined? foo # => "local-variable" defined? $_ # => "global-variable" 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 では、クラスとメソッドも定数として扱うことができます。
適切なクラスまたはモジュール オブジェクトを返すには、式の定数名に接頭辞 :: を付けるだけです。
接頭辞式が使用されない場合、デフォルトでメインのオブジェクト クラスが使用されます。
以下は 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 演算子の優先順位
次の表は、すべての演算子を優先順位に従って高から低までリストしています。
メソッド | 演算子 | の説明 |
---|---|---|
は | :: | 定数解析演算子 |
は | [ ] [ ] | 要素参照、要素コレクション |
です | ** | 指数 |
です! ~ + - | non、補数、1 ドル プラス、1 ドル マイナス (最後の 2 つのメソッドは +@ と -@ という名前です) | |
* / % | 乗算、除算、法 | |
+ - | 加算と減算 | |
>> シフト | は | |
ビット単位と | は | |
ビットごとの XOR、ビットごとの OR | <= < >= | 比較演算子 |
は | <=> == === != =~ !~ | 等価演算子とパターン マッチング演算子 (!= と !~ はメソッドとして定義できません) |
+ | : | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | ||
は定義されていますか? | ||
またはand | ||
注: メソッド列で として識別される演算子は実際にはメソッドであるため、オーバーロードすることができます。 |