2.10 真偽値と条件分岐について

2.10.1 &&や||の戻り値を評価を終了するタイミング

&&や||を使った式全体の戻り値はtrueやfalseだけではない。
最後に評価した式の値を返す。

irb(main):002:0> 1 && 2 && 3
=> 3
irb(main):003:0> 1 && nil && 3
=> nil
irb(main):004:0> 1 && false && 3
=> false
irb(main):005:0> nil || false
=> false
irb(main):006:0> 1 || 2 || 3
=> 1

Rubyではif文以外のところで&&||をつかう場合がある。

# 最初に見つかったユーザの名前を変数userに格納する。
user = find_user('Alice') || find_user('Bob') ||find_user('Carol')
puts user

# 正常なユーザであればメールを送信する。
user.vaild? && send_email_to(user)

なるほど!

2.10.2 優先順序が低いand, or, not

&&, ||, ! に近い動きをするand, or, notがある。
and, orは条件分岐でなく制御フローを扱うのに向いている。
優先順序が低い。

(高い)
!
&&
 ||
not
and or
(低い)
2.10.3 unless文

if文の否定の条件はunless文で書ける。

status = 'error'
unless status == 'ok'
  puts '異常'
end
case文

when節に複数の値を指定してどちらかに一致すれば実行する、というようにできる。

country = 'japan'
case country
  when 'japan','日本'
    'こんにちは'
  when 'us', 'アメリカ'
    'hello'
  else
    '???'
  end
#=> 'こんにちは'

またif文と同様に最後に評価された式を戻り値として返すので、case文の結果を変数に入れることができる。

country = 'japan'
message =
  case country
  when 'japan','日本'
    'こんにちは'
  when 'us', 'アメリカ'
    'hello'
  else
    '???'
  end

message #=>'こんにちは'
参考文献

「プロを目指す人のためのRuby入門」