制御構文
今回は制御構文について学ぶ
最後にはうるう年
入力がうるう年かどうかを表示するプログラムをかけ
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減らすとスッキリするかな〜?今日はここまでです。
参考文献
- source ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby3.org