Google Apps Script

【プログラミングお題】GASで「うるう年」の判定関数を書いてみた

ねぇもりさん、今日のお題は?
もり
もり
うるう年を判定する関数を作ってみよう!
うるう年って4年に1度だよね?なんか簡単すぎない?

うるう年とは?

もり
もり
まずは「うるう年」の定義を確認しよう!

(1)西暦年号が4で割り切れる年をうるう年とする。
(2)(1)の例外として、西暦年号が100で割り切れて400で割り切れない年は平年とする。

 

例えば、このようになります。

  • 1900年=平年(100で割り切れるが、400で割り切れない)
  • 2000年=うるう年(400で割り切れる)
  • 2016年=うるう年(4で割り切れる)
  • 2100年=平年(100で割り切れるが、400で割り切れない)

うるう年の条件を整理してみよう

(1)西暦年号が4で割り切れる年をうるう年とする

もり
もり
これは大丈夫そうかな?

「4で割り切れる=4の倍数」は「うるう年」だね。図にするとこうなるよ

leapyear1

(2)西暦年号が100で割り切れて400で割り切れない年は平年とする

これ、ややこしいなぁ~

「100で割り切れて400で割り切れない数字」とは「100の倍数であるが、400の倍数ではない数字」です。これが「平年」になります。

もり
もり
図にすると、みどり色の部分が「平年」だね。白い円は何になるかわかるかな?
leapyear2
あれっ?そういえば400の倍数って、4の倍数だよね?

400の倍数→400、800、1200、1600…は4の倍数です。

(1)の条件によると、4の倍数は「うるう年」なので、400の倍数も「うるう年」ですね。図にするとこうなります。

leapyear3
ふむふむ、なるほどねぇ~

(3)2つの条件を合体させる

もり
もり
はい、あと一歩だよ~。(1)(2)の条件を合体させてみるよ
leapyear3-2
100の倍数は、4の倍数でもあるよね

(1)の「4の倍数」の「水色の円」のなかに、(2)の円を入れ込めばOKです。

leapyear4

ここまできたら、大きい数字から順番に、if~elseを使って①~④を判定します

  1. もし400で割り切れたら「うるう年」
  2. もし100で割り切れたら「平年」
  3. もし4で割り切れたら「うるう年」
  4. その他「平年」

 

「割り切れるか?」の確認は、「割り算のあまりがゼロであるか」で判定しましょう。

if文では、400→100→4と、大きい数字から順番に割ってチェックします。「4で割り切れるか?」を最初にチェックしてしまうと、100の倍数・400の倍数も判定されてしまうからです。

【スクリプトまとめ】GASでうるう年を判定する

もり
もり
はい、よくできました~!
GASの情報ってネット記事は色々読んでるんだけど、もっと体系的に勉強できる良い本ないかぁ〜?
もり
もり
それならこの本がオススメだね!私もこれで勉強してるよ