2014年1月13日月曜日

#06.ユリウス暦 ~ UnityのJavascript

ユリウス通日関連クラスの実装が概ね完了。 
結論からいうと、C#でゼロから書き直しますた。

(ユリウス通日とは?等はWki等にあるので割愛)

今回は、
  ユリウス通日(JD/AJD)
  ユリウス通日(CJD) ※現代ではこれが最も扱いやすそうではある
  修正ユリウス通日(MJD)
  グレゴリオ暦(西暦 YYMMDD hhmmss形式)  
の相互変換ができるようにした。



昔書いたユリウス変換関連のActionScript3.0(以降AS3)のソースは発掘はしたが、ネットでもっと効率的な変換方法を見つけてしまい結局書き直した。
(昔のソースは妙にまじめに演算しすぎていた。)

また、やはり(?)というか、UnityのJavaScriptの記述構文もAS3とは若干異なる様相で意外と書き直しが多そうだったのも要因となった。





以下、ちょっとメモ。


【UnityのJavaScript】
従来のJavaScriptともちょっと違う「似た」ものと考えておいたほうが良さそう(Javaとも違う)。
JavaScriptはNetscapeOne(古)の頃にちょっと使っていたが、もはや「JavaScript」といいつつも各処理系で微妙な差異が多いようでなんともいえない様相な気もする。多分「JavaScriptのようなモノ」という緩い認識が妥当かも?。


【気づいた点】:AS3 → Unity JavaScript移植

Package{ ~ } の記載が不要な様子。むしろあるとエラーになる。そもそもこれはJava由来(?)

public class JuliusTime extends MonoBehaviour { ~ } 等の宣言がデフォルトで省略されており、いきなり functionの記述ができる。このclass宣言文は書いてもエラーにはならず通る。

public function func( year:Number = 2014){ ~ } 等といった引数デフォルト値の記述がエラーになる。AS3のオーバロードはC++より緩い(?)のでこういう芸当ができるが、これもUnityでははじかれた。※そもそもC++ならコンストラクタ等でできるが、AS3もC#もコンストラクタが基本的に無い処理系なので。

Math.floor関数がMathf.Floor関数になっている等、ライブラリ群に微妙に違いがある。

var a:Number, b:Number, c:Number といったカンマ区切りの構文が通らない。ちょっと信じられないがコレすらもダメなのか?

var d:Vector.<Number> = new <Number>[31,28,31,30,31,30,31,31,30,31,30,31]; にてnewが使えない様子?
var d:Number[] = [31,28,31,30,31,30,31,31,30,31,30,31]; でも通らない。
  →Numberを使うのがそもそも良くない?Number自体が結構緩い型宣言だった気がする。ただそれがAS3だと便利とも思っていたのに~。


ここらまで見てC#を使うことに決定。C#もC++とはいろいろ異なるが(ある意味不便?)、まだマシな感じ。

一応C#では.netのほにゃららなんとか(?)を継承してるとかどうとかで、DateTimeクラス等はMSDNの仕様説明と互換性がある感じ。

0 件のコメント:

コメントを投稿