ActionScript3.0のDate型の実装がかなりいい加減であるようだ

  • JavaなどでDate型を使うと、存在しない日付などを値としてコンストラクタに与えた場合、別の数字に置き換わってしまうので、その挙動を元に存在しない日付を検出できるようだが、ActionScript3.0に用意されているDate型ではそのあたりがかなりいい加減に実装されているようだ(というかもともとそういう意図自体がないようだ)。
  • 一月の日数上限が一律31日ということになっているようで、たとえば今年(2009)の2月は28日までしかないが31日まで値を入れられ、31を超えない限りは値を変えられることがない。ちなみに、31を超えると1から循環する(おそらく月も+1されている・・のか?調べていない)。
  • JavaのDate型のように挙動してくれることを期待していたのでガッカリしたorz。なのでしかたなく日付存在確認アルゴリズムを実装。このような古典的アルゴリズムを再び実装する機会があるとは・・。学生に戻った気分。
  • そういえばActionScript3.0は関数内で変数定義スコープが関数スコープである。別の言い方をすればブロックスコープを持たない・・などというのか。3.0で本格的なオブジェクト指向プログラミング言語になったという大雑把な説明を鵜呑みにしていたので、その辺もC++の様な仕様かと思いきやそうでもなかった。「変数を使用する直前に定義せよ」という誰かさんが謳っているコーディングイディオムに従っている人などは、ブロック内で宣言した変数をその外のブロックで宣言し警告に出くわすことも少なくないだろう。エラーになったりしないだけましかもしれないが、ソースの可読性やトレーサビリティの点で面倒になるのでいけない。