参考サイト
チャート式ruby-III(if, case, Array.each by leap year)
if-else文
Rubyだけでなくいろんな言語で使われる条件分岐 基本はPythonとかと一緒
if 式 [then]
式 ...
[elsif 式 [then]
式 ... ]
...
[else
式 ... ]
end
[]内の動作はあっても無くても動く
else if をelsifと書くことだけ注意
書き方例:
if a=20
b true
elsif c=30
b true
else
b false
end
お題:うるう年か?
入力された数がうるう年かを表示するプログラム
・ 4で割り切れる数の年はうるう年
・ ただし、100で割り切れる年はうるう年でない
・ 加えて、400で割り切れる年はうるう年
まずは4で割り切れるか否か
[2004, 1999].each do |year|
p year
if year % 4 == 0
p true # 4で割り切れるなら真(うるう年)
else
p false # 4で割り切れないなら偽(うるう年じゃない)
end
end
1行目は2004、1999をそれぞれyearに入れている
次に、100で割り切れるかの処理を入れる
[1900, 2004, 1999].each do |year|
p year
if year % 100 == 0
p false # 100で割り切れるなら偽
next
end
if year % 4 == 0
p true
else
p false
end
end
next が実行されると、next以降の処理が実行されずに次の繰り返しに移行する.繰り返しそのものを中断してしまう break とはちょっと違う
最後に、400で割り切れるかの処理を入れる
def leap?(year)
if year % 400 == 0
p true # 400 で割り切れるなら真
elsif year % 100 == 0
p false
elsif year % 4 == 0
p true
else
p false
end
end
[2000, 1900, 2004, 1999].each do |year|
p year
leap?(year)
end
ついでに関数leap?として実装した
EX
if の代わりに case を使って綺麗に書くとこうなる
def leap?(year)
case
when year % 400 ==0 ; p true
when year % 100 ==0 ; p false
when year % 4 ==0 ; p true
else ; p false
end
end
[2000, 1900, 2004, 1999].each do |year|
p year
leap?(year)
end
note
条件分岐をあらかじめ考えて実装するのは大変だが、順を追って実装すると良いかも?
- source ~/grad_members_20f/members/batamon-427/task7.org