【一人 Ruby Advent Calendar 2017】Ruby の && と || 演算子【14日目】
一人 Ruby Advent Calendar 2017 14日目の記事になります。
今回は Ruby の &&
と ||
演算子のお話。
&&
や ||
演算子
Ruby の &&
や ||
演算子はちょっと特殊で、真理値ではなくて『左辺、もしくは右辺を評価した値』を返します。
&&
:左辺を評価して、- 偽であればその値(
nil
かfalse
)を返す - 真であれば右辺を評価し結果を返す
- 偽であればその値(
||
:左辺を評価して、- 真であればその値を返す
- 偽であれば右辺を評価し結果を返す
p 1 && 2 # => 2 p nil && false # => nil p false && nil # => false p 1 || 2 # => 1 p nil || false # => false p false || nil # => nil
ですので、以下のような書き方を行うこともできます。
# value が偽でなければ右辺を評価した値を返す value && value + 10 # キーが存在していれば右辺を評価した値を返す hash[key] && hash[key].hoge
また、||
を利用して『変数が未定義(もしくは偽)の場合に初期化する』というコードも記述することができます。
a ||= 1 # a が偽か未定義ならば値を代入する
このような初期化はよく見かけるので覚えておくとよいでしょう。
ちなみに前回、Ruby の演算子はメソッドと書きましたが &&
や ||
は特別な演算子なので『メソッドではないこと』に注意してください。
# 以下のような呼び出しはできない 1.&& 2 1.send(:&&) 2 class X # 再定義もできない def && end end
まとめ
&&
や||
は真理値ではなくて評価した値を返す&&
や||
は特別な演算子で再定義できない
&&
や ||
は特別な演算子ではありますが、慣れると便利なので Ruby を使うならその挙動を理解しておくとよいでしょう。