👩‍❤️‍👨

【Ruby】| || & &&の違い

2024/07/01に公開

どのように理解しておけばいいか

  • 「|」「&」が一つの場合は、純粋に「または」と「かつ」と考える
  • 「|」「&」が二つの場合は、どうなれば真になるのかを考える
    • 条件1 || 条件2は条件1か条件2のいずれかが真であれば真
      • 左辺が真の場合どの値を返すか:左辺
    • 条件1 && 条件2は条件1も条件2も真であれば真
      • 左辺が真の場合どの値を返すか:右辺

|

この演算子は、二つの配列を結合し、重複する要素を一つにまとめて出力します。

a = [1, 2, 3]
b = [1, 3, 5]
a | b  # => [1, 2, 3, 5]

ここでは、配列aとbを結合し、重複する要素(1と3)を一つにまとめて、新しい配列を返しています。

||

この演算子は論理和を表し、左辺が真の場合、右辺の評価は行われず、左辺の値が返されます。左辺が偽の場合、右辺の値が返されます。

a = [1, 2, 3]
b = [1, 3, 5]
result = a || b  # => [1, 2, 3]

a = nil
b = [1, 3, 5]
result = a || b  # => [1, 3, 5]

a = nil
b = false
result = a || b  # => false

以下、各処理の解説。

a = [1, 2, 3]
b = [1, 3, 5]
result = a || b  # => [1, 2, 3]

ここでは、aが真の値(非nil、非false)なので、aがそのまま返されます。

a = nil
b = [1, 3, 5]
result = a || b  # => [1, 3, 5]

ここでは、aがnil(偽の値)なので、bが返されます。

a = nil
b = false
result = a || b  # => false

ここでは、aもbも偽の値なので、bが返されます。

&

この演算子は、二つの配列の中で共通する要素のみを取り出して出力します。

a = [1, 2, 3]
b = [1, 3, 5]
result = a & b  # => [1, 3]

ここでは、配列aとbの共通要素(1と3)を取り出して、新しい配列を返しています。

&&

この演算子は論理積を表し、左辺が真の場合、右辺の値が返されます。左辺が偽の場合、右辺の評価は行われず、左辺の値が返されます。

a = [1, 2, 3]
b = [1, 3, 5]
result = a && b  # => [1, 3, 5]

a = [1, 2, 3]
b = false
result = a && b  # => false

a = nil
b = [1, 3, 5]
result = a && b  # => nil

以下、各処理の解説。

a = [1, 2, 3]
b = [1, 3, 5]
result = a && b  # => [1, 3, 5]

ここでは、aが真の値なので、bが返されます。

a = [1, 2, 3]
b = false
result = a && b  # => false

ここでは、aが真の値ですが、bが偽の値なので、bが返されます。

a = nil
b = [1, 3, 5]
result = a && b  # => nil

ここでは、aが偽の値なので、bは評価されずに、aが返されます。

Discussion