【結論】
・「||」「&&」は、論理演算子と呼ばれ、条件式で論理積(AND)や論理和(OR)を指定する際に用いられる
・「|」「&」は、Integerクラス(数値)ではビット演算子、Arrayクラス(配列)では集合の演算子として機能する
・「|」「&」はオーバーライド可能だが、「||」「&&」はオーバーライド出来ない。
【目次】
- 「|」「&」「||」「&&」について
- 論理演算子「||」「&&」
- オブジェクトによって動きの変わる「|」「&」
- 「||」「&&」はオーバーライド不可
- 参考情報
- 《今日の学習進捗(3年以内に10000時間に向けて)》
【本題】
「|」「&」「||」「&&」について
Rubyの演算子「|」「&」「||」「&&」は、それぞれ役割が異なります。
今回は、それぞれの機能についてまとめます。
論理演算子「||」「&&」
「||」「&&」は、論理演算子と呼ばれ、条件式で論理積(AND)や論理和(OR)を指定する際に用いられます
#「&&」は全ての式が真だとtrue 1 == 1 && 2 == 2 => true 1 == 1 && 2 == 3 => false #「||」はいずれかの式が真だとtrue 1 == 1 || 2 == 2 => true 1 == 1 || 2 == 3 => true 1 == 2 || 2 == 3 => false
なお、論理演算子においては左辺で結果が確定している場合、右辺は評価されません。
「||」の場合、左辺が真であれば結果は確定します。
「&&」の場合、左辺が偽であれば結果が確定します
これらの場合、仮に右辺が例外の発生する様な式だとしても、評価されてないのでエラーは出なくなります。
オブジェクトによって動きの変わる「|」「&」
「|」「&」は使用するオブジェクトのクラスによって動きが変わります。
Integerクラス(数値)の場合、ビット演算子となります
#「|」は論理和を返します 10 | 3 => 11 #「&」は論理積を返します 10 & 3 => 2
Arrayクラス(配列)の場合は、集合の演算子となります。
a = [1,2,3,4,5,6] => [1, 2, 3, 4, 5, 6] b = [2,4,6] => [2, 4, 6, 8, 10] #「&」はいずれにも含まれる値を返します a & b => [2, 4, 6] #「||」はいずれかに含まれる値を返します a | b => [1, 2, 3, 4, 5, 6, 8, 10]
「||」「&&」はオーバーライド不可
「|」「&」は演算子として機能していますが、オブジェクトによって動きを変える使用上、実際にはメソッドとして定義されています。
その為、「|」「&」はオーバーライド(再定義)する事が可能となっています。
しかし、「||」「&&」は演算子として定義されている為、オーバーライド(再定義)出来ない仕様となっています。
参考情報
Ruby | 再定義できる演算子 で組み込み演算子風のメソッドを定義する #ruby - Qiita
《今日の学習進捗(3年以内に10000時間に向けて)》
明日のRubysilver受験に向けて勉強中。
学習開始からの期間 :220日
今日までの合計時間:2114h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:2009h
目標との解離:105h
「10,000時間」まで、
残り・・・「7886時間!」