高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

イチマツの不安が・・・

 明日美(id:yurli)さんたちのチャットでの授業、わたしは今回忙しいので傍観だけさせて頂きました。なんか今回はいろいろな方が来て騒がしくなってしまったようですが…。
今回の授業はうるう年を求める式を作る と言うものです(ネタ元はわたしが明日美さんのダイアリーに書き込んだコメント)。まあ、if分の練習の基礎でしょうか?基本情報技術者試験でも出ましたしね(平成16年午後 C言語の問題)。


 うるう年というのは、ご存じでしょうが以下の条件によって決められます

  1. 年数が4で割り切れる年はうるう年
  2. 年数が100で割り切れる年はうるう年ではない(4で割り切れても)
  3. 年数が400で割り切れる年は、例外的にうるう年

 と言うことになります*1。地球の回転が1年365日より微妙に遅いので、その"ずれ"を解消するために、定期的におかれるのがうるう年。ですから他の式で算出することも出来たと思いますがね。まあ、どちらにせよもっとも一般的な式はこれでしょう。
チェックするときには2000年を含めることを忘れずに(この年のチェックが漏れたせいで、2000年問題も大きくなったと言う話もあるし)、1900〜今年までのうるう年が列挙できたら十分でしょう。

 さて、これを表現するのは簡単です。変数yearを年数として、

  1. year % 4 == 0 … もし、yearと4のあまりが0ならば…
  2. year % 100 != 0 … もし、yearと100のあまりが0でなければ…
  3. year % 400 == 0 … もし、yearと400のあまりが0ならば…

となるのですから。これらを一つずつ解釈していくならば、もちろん簡単です。しかし、ここはこの式を一行で表さなければ面白くありません。
一行で表す場合、日本語に直すと、
「yearが、4で割り切れて(1)、100で割り切れない値(2)。または(3)、400で割り切れる(4)場合なら、それはうるう年」です。

                (1)     (2)     (3) (4)
  boolean leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  return leap;

 と言うことになります。こうやって考えれば、楽ですよ ね?それに近いことをくさば(id:tomo_k)さんからサジェスチョンもらってるのに答えられないようでしたが…。


 しかし、わたしはどうもあれを見ていて不安を感じます。授業進度が異常に遅いというか、異常に早いというか・・・。いままで明日美さんがギブアップしなかった問題がほとんどなかったことから見ても、ちょっと授業の仕方について考えるべき点があるように思えます。
 まずは、あの場に何人もの人が押しかけるのが問題の一つではないかと思うのです。(チャットと言うものであるが故)場が流れていくから、とりあえずアクションを起こさざるを得ない。結果、そっちに集中力が流れていってうまくいかないのでは?と。
 もうひとつは、くさばさんという偉大すぎる人が相手だと言うこと。かたやJAVAを初めて間もない中学三年生、かたやJAVAでご飯を食べてるプロのプログラマ。緊張もしようものです。それがお互いの無駄な干渉を生み、結果時間を浪費するだけになりかねない。
 むしろ、ああいう授業はチャットではなく、メールなどでやった方がいいかも知れませんね。そうすればお互いむやみに干渉しあうこともないし、時間に束縛されることもないし。授業をしてる側のくさばさんだって余暇を楽しんだり、仕事の準備等で忙しいでしょうし、わたしだって大当たりで出てきた数多くの課題でヒマではありません。明日美さんも公○式(何となく伏せ字)などで忙しいはずですし。


 それから明日美さん。「たしかうるう年というのすら…」などという発言がありました。
説明するのは簡単ですが、せっかくネットにいるんですから、あらゆるものを有効に使いましょう。
分からない言葉があれば、国語辞書を引くなどすることをお勧めします。確か(ベクターに)ソフトがあったのでそれを使った方が良いと思いますが、一応Yahooの辞書あたりを推奨しておきます。
http://dic.yahoo.co.jp/
「少しでも分からないことがあったら調べる」位の心構えが大事だと思いますよ。チャット中という場でなかなか難しいと思うので、自分専用のスタートページを作って、そこから辞書を引いたりGoogleで検索したり、たいていのことがすぐ出来るようにしておくと良いかも。

*1:ちなみに、"割り切れる"とは、XとYの剰余(X÷Yのあまり)が0の時と言う表現で知ることが出来ます