LoginSignup
4
0

More than 3 years have passed since last update.

第7回

Last updated at Posted at 2020-12-04

!Ubuntu-20.04.1 !ruby-2.7.1p83

これは講義用のまとめサイトです。見た人は是非LGTMを押しといてください。

やったこと

  • bundler
  • if, case, Array.each

if, case, Array.each

条件分岐を取り扱おうということだ

お題

入力された年数がleap year(うるう年)かどうかを判定する
プログラミングの実習でよくある課題だが、条件分岐が複雑

まず4の倍数かどうかを判定する

入力部は

p year = ARGV[0].to_i

to_iとはIntegerであるということを示すものらしい

if year%4==0 then
  p true
else
  p false
end

最初の条件分岐文がこちら。yearを入力として、それを4で割った余りが0ならtrue、そうじゃなければfalseだぞ、と出力するこれを実行すると

> ruby check_leap.rb 2004
2004
true

1997の場合は

> ruby check_leap.rb 1997
1997
false

となる

特殊な年数の場合をはじいていく

100で割り切れる年はうるう年でなく、400で割り切れる年はうるう年であるという二点を判定できるようにする
こういう例外処理は先に済ませておこうと思う。また、長くなってきたのでmethodにしておく

p year = ARGV[0].to_i
def leap?(year)
  if year % 400 ==0
    p true
  elsif year % 100 ==0
    p false
  elsif year % 4 == 0
    p true
  else
    p false
  end 
end
leap?(year)

これを実行すると

> ruby check_leap.rb 1900
1900
false

2000の場合は

> ruby check_leap.rb 2000
2000
true

となった。100の倍数だが400の倍数でない1900と、100の倍数かつ400の倍数である2000を区別できている

array, eachを使う

大量の値を一気にテストしたいときにはarray(配列)が便利。

def leap?(year)
  if year % 400 ==0
    p true
  elsif year % 100 ==0
    p false
  elsif year % 4 == 0
    p true
  else
    p false
  end
end
[1900,1997,2000,2004].each do |year|
 p year
  leap?(year)
end

実行すると

> ruby check_leap.rb
1900
false
1997
false
2000
true
2004
true

正しく判定されてますね

case

授業中では扱ってなかった気がするけどcaseを使うとさらにコードのrefactoringが可能
caseを使って先ほどのコードを書きなおして

def leap?(year)
  case
  when year % 400 ==0 ; return true
  when year % 100 ==0 ; return false
  when year % 4 ==0 ;   return true
  else                  return false
  end
end
[1900, 1997, 2000, 2004].each do |year|
  p year
  leap?(year)
end

で動くかと思ったら

> 1900
> 1997
> 2000
> 2004

となり、判定が行われていない???(red)
と思ったけど、よく見たらleap?(year)の結果の出力部が記述されてないじゃん、ということで、13行目を

p leap?(year)

として動かすと

> 1900
> false
> 1997
> false
> 2000
> true
> 2004
> true

よかった、プログラムは短くなったしgreen状態にできた

参考記事


  • source ~/MasahiroOba/grad_members_20f/members/MasahiroOba/chapter7.org
4
0
0

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
4
0