3
0

More than 3 years have passed since last update.

part3 if構文

Last updated at Posted at 2020-12-10

制御構文

今回は制御構文について学ぶ
最後にはうるう年

入力がうるう年かどうかを表示するプログラムをかけ
1.うるう年は4で割り切れる数の年
2.100で割り切れる年はうるう年ではない
3.400で割り切れる年はうるう年
4.2004,1999,1900,2000で試す
5.それぞれtrue, false, false, true

if 構文

まずは書式から

if 条件1 then
  条件1が真の時に実行するコマンド
elsif 条件2 then
  条件1が偽で条件2が真の時に実行するコマンド
elsif 条件3 then
  条件1が偽かつ条件式2がのときにで条件式3が真の時に実行するコマンド
else
  全ての条件が偽の時に実行するコマンド
end

まず条件1が評価され、真の場合thenが実行され、偽の場合elsifが実行される。そしてすべてのelsifが偽の場合、elseからendまでのコマンドを実行する。
elseは記述しなくてもよく、elsifは好きな数記述することができる。

で、条件てどう書くの?

関係演算子

まずは書式

左辺 演算子 右辺

で関係演算子てなんですの?
条件に対し、真か偽かで判断するものである。
さて種類は…

記述 演算子 意味
a == b == aがbに等しい
a != b != aとbが等しくない
a > b > aがbより大きい
a >= b >= aがb以上
a < b < aがbより小さい
a <= b <= aがb以下

これらは左辺と右辺の数値や文字列が等しいかどうか、大小の関係を比較することができる。比較した結果は上記の表の意味に適合すると真、不適合の場合に偽を返す。

これだけでも書けるがものによってはelsif並びまくって読みずれぇ!となりかねないのでもう少し簡潔にかけるものを…

論理演算子

まずは書式

条件1 演算子 条件2

これ用いることで条件1と条件2がともに真なら…とelsifの数が減らせて簡潔に見えるのでは?
で、何があるの?

記述 演算子 意味
a && b && aとbがともに真の場合に真
a ||b || aかbの少なくともどちらかがが真の場合に真
!a ! aが真の時に真,偽のときに真

これらを使っていって最終的には、うるう年の課題へいきたいなぁ…

四則演算

最終目的にいくならこれもいるなぁだいたい使うものを示す。

演算子 内容 具体例
+ 加算 5 + 3
- 減算 4 - 2
* 乗算 2 * 8
除算 8 / 2
% 剰余 13 % 3
** べき乗 12**2

だいたい意味はわかりますよね?

で、これでいけるのかな?
まだ足りない気もする、4つで試すなので、繰り返しかあ

eachメソッド

これはオブジェクトにある要素を順に取り出し、順に処理を行う。
まずは書式

オブジェクト.each do |変数|
  実行するコマンド1
  実行するコマンド2
end

まだよくわかんない気もするので具体例を示す。うるう年を踏まえて…

year = [2004, 1999, 1900, 2000]
year.each do |num|
 print("num = ", num)
end

実行結果は

num = 2004
num = 1999
num = 1900
num = 2000

となっている
これは使えるぞ…

課題へ…

上記の手法を使って課題を解いてみよう
さて、まずは日本語で条件を整理してみよう
入力は4で割り切れる。また100では割り切れなく、400で割り切れる
入力 % 4 = 0 でtrue, 入力 % 100 = 0 && 入力 % 400 != 0 はfalse
てことは
条件部は

if year % 100 == 0 && year % 400 != 0
  p false
elsif year % 4 == 0
  p true
else
  p false

になるはず。
てなわけでこれにeach構文を加えてみて…

num = [2004,1999,1900,2000]
num.each do |year|
  p year
  if year % 100 == 0 && year % 400 != 0
    p false
  elsif year % 4 == 0
    p true
  else
    p false
  end
end

そして実行結果が

2004
true
1999
false
1900
false
2000
true

イケてるじゃん
始めのif文をelsifを使って2つに分けることも可能だが、やはりelsif減らすとスッキリするかな〜?今日はここまでです。

参考文献

チャート式ruby-Ⅲ


  • source ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby3.org
3
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
3
0