プログラミンで最重要と行っても過言ではない条件分岐について解説していきます。if文はある値の真偽値が「true」の場合に特定の処理を実行します。
if文
まずは以下の簡単な例を見てください。
こちらの例は「language」という変数が「vn」という値だった場合に「ベトナム」という文字列を出力するというものです。
「if」の後に評価対象の「language == ‘vn’」という評価式を記載し、その後に評価式の結果が「true」だった場合に実行する処理を記載します。最後にif文を閉じる「end」を記載します。
[76] pry(main)> language = 'vn'
=> "vn"
[77] pry(main)> if language == 'vn'
[77] pry(main)* puts 'ベトナム'
[77] pry(main)* end
ベトナム
=> nil
以下のように「vn」を「jp」に変更すると何も記載されません。
[78] pry(main)> language = 'jp'
=> "jp"
[79] pry(main)> if language == 'vn'
[79] pry(main)* puts 'ベトナム'
[79] pry(main)* end
=> nil
複数の条件分岐
「elsif」「else」を使用することで複数条件で分岐することもできます。
language = 'jp'
if language == 'vn'
puts 'ベトナム'
elsif language == 'jp'
puts '日本'
else
puts 'その他'
end
# 出力
日本
ちなみにnilだと「その他」が出力されます。
language = nil
if language == 'vn'
puts 'ベトナム'
elsif language == 'jp'
puts '日本'
else
puts 'その他'
end
# 出力
その他
nilの扱い
Rubyでは「nil」と「false」が「偽」、それ以外は「真」として扱われます。
以下の例では一つ目のif文は「nil」なので「偽」として扱われるため、if文内の処理は実行されません。
二つ目のif文も「false」なので「偽」として扱われるため、if文内の処理は実行されません。
三つ目のif文は「0」で「nil」でも「false」でもないので「真」として扱われるため、if文内の処理が実行されます。
if nil
puts 'nilは真?偽?'
end
if false
puts 'falseは真?偽?'
end
if 0
puts '0は真?偽?'
end
#出力
0は真?偽?
unless文
if文では「真」の場合だけ実行されるのに対して、unless文はif文と逆で「偽」の場合だけ実行されます。
以下の例を見てみましょう。
unless文では「nil」は「偽」、「false」は「偽」として扱われていることがわかります。
また、「0」は「真」として扱われ、if文内が実行されていないことがわかります。
unless nil
puts 'nilは真?偽?'
end
unless false
puts 'falseは真?偽?'
end
unless 0
puts '0は真?偽?'
end
#出力
nilは真?偽?
falseは真?偽?
後置if文、後置unless文
Rubyでは先にif文内、unless文内で実行される処理を先に記載し、条件を後に記載する「後置if文」、「後置unless文」言うものがあり、条件分岐を1行で記載することができます。
language = 'vn'
# 普通のif文
if language == 'vn'
puts 'ベトナム'
end
# 後置if文
'ベトナム' if language == 'vn'
unlessの場合も同様です。
language = 'vn'
# 普通のunless文
unless language == 'jp'
puts 'その他'
end
# 後置unless文
'その他' unless language == 'jp'
三項演算子
三項演算子は以下のように「?」の手前に条件式「language == ‘jp’」を記載し、「:(コンマ)」区切りで、先に条件が「true」の場合の処理、「:(コンマ)」の後に「false」の場合の処理を記載します。この場合は「true」の場合「日本語」が表示され、「false」の場合「外国語」が表示されます。
[108] pry(main)> language = 'jp'
=> "jp"
[109] pry(main)> place = language == 'jp' ? '日本語' : '外国語'
=> "日本語"
[110] pry(main)> place = language == 'vn' ? '日本' : '外国語'
=> "外国語"
戻り値
他の言語では「return」などと記載し明示的に戻り値を記載しますが、Rubyではif文の最後の式の評価結果が戻り値として返されます。
points = 80
result = if points >= 90
'高評価'
elsif points >= 60
'中評価'
else
'低評価'
end
puts result
#出力
中評価
複数の処理がある場合、一番最後の処理が戻り値をなります。
points = 80
result = if points >= 90
'高評価'
elsif points >= 60
'中評価'
'ちゅうくらい'
else
'低評価'
end
puts result
#出力
ちゅうくらい
まとめ
やっとプログラミングっぽくなってきましたね。
これで少し複雑な処理もできるようになっていきますので、頑張ってください。
コメント