コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyはif文を使って代入する値を分岐した記述ができる

再代入を回避させ、1回の記述で代入をさせるための記述を整理として

環境

検証したバージョン

$ ruby -v
ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [arm64-darwin22]

リファレンスマニュアルより

if 式は、条件が成立した節(あるいは else 節)の最後に評価した式の結果を返します。else 節がなくいずれの条件も成り立たなければ nil を返します。 - 制御構造 (Ruby 3.3 リファレンスマニュアル)

と記載されているので以下のように記述ができる。

gender = if is_male then "male" else "female" end
pp gender
# "male"

また、ドキュメントの記載どおり、いずれにも合致しないとnilになる。

is_male = false
is_famale = false
gender = if is_male == "male" then "male" elsif is_famale then  "female" end
pp gender
# nil

改行も可能

下記のような記述も可能。下記の場合は then を省略して記述している。

is_on = true
message = if is_on
            "スイッチオンです"
          else
            "スイッチオフです"
          end
pp message
# "スイッチオンです"

関連リンク