Rubyを勉強し始めて1日目
初心者として気になったこと・躓いたことを備忘録として残していこうと思います。
#構文
if 条件A
# 条件Aが真だった場合の処理
elsif 条件B
# 条件Bが真だった場合の処理
elsif 条件C
# 条件Cが真だった場合の処理
else
# どの条件に対しても真にならなかった場合の処理
end
複数条件の場合は、else ifではなくelsifです。
JavaScriptなどの言語から勉強している方は注意が必要です。(私も間違えやすい...)
##便利な性質
###戻り値を返す
Rubyのif文は戻り値を返すため、変数に戻り値を代入することができます。
以下は時間帯によって表示する挨拶を変更するコード例です。
time_zone = '夜'
greeting =
if time_zone == '朝'
'おはよう'
elsif time_zone == '昼'
'こんにちは'
elsif time_zone == '夜'
'こんばんは'
else
"???"
end
puts greeting #=>'こんばんわ'
###if修飾子
if修飾子として文の後ろにif文を置くことができます。
以下は成績が80点以上の場合、'合格'を表示するコード例です。
score = 100
puts '合格' if score >= 80
#>='合格'
便利な性質も多いですがメソッドで使用するときは注意が必要です。
私が使用していてハマったことを書き残しておきます。
##メソッドで使用する場合の注意点
###if文
Rubyのif文は戻り値を返すという特性があるため、return文を書く必要はありません。
return文を書かないのであれば変数も必要ないと思い、以下のような成績が80点以上は、'合格'を返しそれ以外は'不合格'を返すコードを書きました。
def exam(score)
'不合格'
if score >= 80
'合格'
end
end
scoreに50を渡した場合
条件は成り立たず最後に評価された式は、'不合格'となり戻り値として返されると考えました。
しかし結果は以下の通りになります。
puts exam(50) #>=nil
'不合格'は返されずnilが返されます。
if文についての詳しい解説は公式リファレンスにあります。
if 式は、条件が成立した節(あるいは else 節)の最後に評価した式の結果を返します。
else 節がなくいずれの条件も成り立たなけれ ば nil を返します。
制御構造 - if(Ruby 3.0.0)
このように思わぬところでバグを生む要因になることがあるため注意が必要です。
正しく書く場合は、次のように書くことができます。
def exam(score)
if score >= 80
'合格'
else
'不合格'
end
end
###if修飾子
偽になる時の戻り値はnilです。
右辺の条件が成立する時に、左辺の式を評価してその結果を返します。条件が成立しなければ nil を返します。
制御構造 - if 修飾子(Ruby 3.0.0)
そのため以下のようなコードを書くときは注意してください。
def exam(score)
'不合格'
'合格' if score >= 80
end
puts exam(50) #>=nil
こちらも不合格は返されずnilが返されます。
正しく書く場合は、次のように書くことができます。
def exam(score)
return '合格' if score >= 80
'不合格'
end
##最後に
最後まで読んでいただきありがとうございました。
LGTMやコメントいただけると励みになります。
ここ間違ってるよといったような指摘コメントも歓迎していますXD
よろしければフォローもお願いします!