はじめに
プログラミングにおいてif文は相当な頻度で使われていると思いますが、どんな時に使っていることが多いでしょうか?
私はこのように
trueとfalseの時に使っているイメージが多かったです。
# 数値を使った条件
a = 1
if a > 0
puts "aは1より大きいのでtrue:これは表示されます。"
end
if 1 < 0
puts "aは1は0より小さいのでfalse:これは表示されません。"
end
しかし、処理結果がnilであった場合も
処理内容をスキップして使ったことはありますか?
if文のおさらい
すごい基礎的なことですが、if文は条件文の処理結果が真であれば指定した処理内容を実行、偽であれば処理内容を実行しないものとなります。
ただ、偽 = falseのイメージが強く、
nilも偽として扱っているのを忘れていくことありませんか?
つまり、以下の通りになります
if 条件文の処理結果はtrue?false?nil?
"trueだったら処理文の実行"
end
falseとnilだったら処理スキップ
if true
puts "これは実行されます"
end
#=> 出力あり:これは実行されます
if false
puts "これは実行されません"
end
#=> 出力なし
if nil
puts "これも実行されません"
end
#=> 出力なし
処理結果がnilの時の例文
では、条件文の処理結果がnilだと偽となることはどのように利用できるのでしょうか??
例えば、動物を入力するとスコア化するプログラムがあるとします
(ネコとイヌは特に私が好きなので点数を高く設定しています)
コードは少し長いので全部見なくても大丈夫です!
puts "動物は何匹を教えてください"
N = gets.chomp.to_i
# 入力した値を収める箱をつくる
animal_array = []
# スコアの初期値
total_score = 0
N.times do |i|
puts "#{i + 1}匹目の動物はなんですか?"
animal = gets.chomp
# 箱に入力した要素を入れる
animal_array << animal
end
# 点数変換ルール
score_hash = {
# ネコは10点
'ネコ' => '10',
# イヌは8点
'イヌ' => '8',
# トリは5点
"トリ" => "5"
# それ以外は1点
}
# 変換ルールにしたがって要素を数字に変換
animal_array.each do |animal|
if score_hash[animal]
# 指定の動物が存在する場合、"10"などを数字型に変換してその点数を加算
total_score += score_hash[animal].to_i
else
# 指定の動物が存在しない場合(nilの場合)、1点を加算
total_score += 1
end
end
# 合計スコアの出力
puts "合計スコアは#{total_score}点です。"
ちなみに入力例と出力結果はこのような感じになります!
動物は何匹か教えてください
3
1匹目の動物はなんですか?
ヘビ
2匹目の動物はなんですか?
ネコ
3匹目の動物はなんですか?
トリ
合計スコアは16点です。
今回のコードで注目してほしいのは以下の部分です
if score_hash[animal]
# 指定の動物が存在する場合、"10"などを数字型に変換してその点数を加算
total_score += score_hash[animal].to_i
else
# 指定の動物が存在しない場合(nilの場合)、1点を加算
total_score += 1
end
if score_hash[animal]
if文はtrueなら実行、falseとnilならスキップすると言いました。
したがって、if文の箇所はこのようになります。
score_hash[animal]はハッシュ[キー] = 値の構文です
if score_hash[animal]
# ⇓
if score_hash["ネコ"]
# ⇓
if "10"
# ⇓
if true(すなわち真)
# ⇓
total_score += score_hash[animal].to_i
これで入力した値がキーで用意していれば、
total_score += score_hash[animal].to_iが実行されます!
では、逆にキーで用意していない値だとどうなるのでしょうか?
if score_hash[animal]
# ⇓
if score_hash["へび"]
# ⇓
if nil(すなわち偽)
# ⇓
total_score += 1
入力した値がキーで用意されていなかったら、else下のtotal_score += 1の実行となります。
このように条件文の処理結果がnilであるかないかを利用して実用できることがあります。
いかがでしたでしょうか?
内容自体はすごく基礎的なことであると思いますが、私は意識できませんでした
長くなりましたが、ここまで読んで頂きありがとうざいました!お疲れ様でした