問題
以下の条件を満たすin1to10メソッドを実装しよう
・第1引数の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
解答
考察
if文を用いて第1引数のnumの条件式が合っている場合はTrueを出力する。
次にelsifの条件式で第1引数がfalseの条件(numが1以下と仮定義)の場合でもoutside_modeがTrueとなる場合はTrueと出力することを定義
最後にどちらもfalseの場合、elseを用いてfalseを出力するように記述した。
模範解答
解説
2行目では、論理演算子&&と||を用いて条件式を記述している。
(num >= 1 && num <= 10)|| outside_modeとは、
numが1以上かつnumが10以下、またはoutside_modeがtrueの場合を意味している。
それ以外(else)であればfalseと出力される条件を示している。
問題文の出力例の条件を当てはめていく。
num=5の時点で(num >= 1 && num <= 10)の条件に
当てはまっているので出力結果は「True」と出力される。
num = 11により numの条件式には当てはまらない。かつoutside_modeがfalseのため出力結果は「false」と出力される。
num = 11のためnumの条件式には当てはまらない。
しかしoutside_modeがtrueのため、「True」と出力される。
反省
まず、trueの場合とfalseの場合と大きく分類する必要があった。
その上で論理演算子を使用して条件式を定義していく事が必要であった。
aもbもtrueの場合にてtrue は「 a && b 」
aかbのどちらかがtrueの場合は「a || b 」
rubyの論理演算子では左辺から右辺に条件式を評価する。
全体の評価が確定したらその時点で残りの評価は行われない。
「a && b 」においてaがfalseの時点で全体がfalseなので終了する。
「a || b 」においてaがtrueの時点で全体がtrueなので終了する。
今後は以上の要点を踏まえて記述していく。