LoginSignup
0
0

More than 1 year has passed since last update.

真偽値による条件の組み合わせ

Posted at

本日アウトプット練習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。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0