本日アウトプット練習2回目。
以下の条件を満たすメソッドを実装。
・第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること
・第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
・それ以外はFalseを出力すること
def in1to10(num, outside_mode)
# ここに条件式を記述する
end
# 呼び出し例
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)
# 出力例
#in1to10(5,false) →True
#in1to10(11,false) →False
#in1to10(11,true) →True
最初自分で書いたダメな例
def in1to10(num, outside_mode)
if num >= 1 && num <= 10
puts "True"
else
puts "False"
end
end
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)
# 出力結果
# True
# False
# False
これでは第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
というのが満たされず思うような出力結果を得られない。。。
そこで論理演算子||
を使えばいいのでした。
# aかbのどちらかがtrueの場合にtrue
# この例の場合はaがtrueの時点で全体がtrueと確定するため、bの判定は行われない。
a || b
rubyの論理演算子は左辺から右辺に条件式を評価する。全体の評価が確定した時点で動きはストップして残りの評価は行われない。
模範回答
def in1to10(num, outside_mode)
if (num >= 1 && num <= 10) || outside_mode
puts "True"
else
puts "False"
end
end
# 呼び出し例
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)
if num >= 1 && num <= 10
にif num >= 1 && num <= 10||outside_mode
と組み合わせればnumが1以上かつnumが10以下、または、outside_modeがtrueの場合「True」と出力される。それ以外であれば「False」と出力される条件が成立。
in1to10(5,false) →True
num=5によりif文の左の条件に当てはまって結果はTrue。左がtrueでもfalseでも出力は変わらない。
in1to10(11,false) →False
num=11により左の条件には当てはまらず。outside_modeもfalseなので出力結果はFalse。
in1to10(11,true) →True
num=11により左の条件には当てははまらないが、第二引数のoutside_modeがtrueなので出力結果はTrue。