今更フラッシュ!(技名)

 前述の通り、少しmixiアプリを組んでいる関係上、今更ながらflashに手を出してみてます。*1



 いやま、flash自体は昔少しかじったことがあったんですが、今回はActionScript主体で比較的真面目にやってます。



 で、Javascriptとか特にそうなんですけど、

僕はこの手の非コンパイル型のスクリプト言語(?)が苦手というか嫌いです。

何が嫌って、「変数の型」と「関数の引数」が何とも…。



 以下、グチ。

変数の型

 この手のスクリプトは大抵「型推定」か「宣言なし」で変数が使用可能です。

ただ、そこが長所にして短所で、気軽に使えはするものの、いざ計算するときに予想通りの挙動をしなかったりする。


:例
num = num + 1;
上記の式の結果はどうなるだろうか?「num+1がnumに格納されている」?それ「も」正解。


正解パターンは以下の通り。
・「var num = 1;で宣言されていた場合」
num = 2;
・「var num = "1";で宣言されていた場合」
num = "11";
・「var num;で宣言されていた場合」
num = NaN;(もしくはundefinedとか、「不定」ないし「無効」的な何か)
ちなみに、上記はJavascriptの場合で、

flashだとまた扱いが違う。

変数ごとに型指定ができる(型宣言ではなく、宣言時に型を付与する形)代わりに、

型指定をしないと文字列型(とは正確には違うようだけど、そんな感じの挙動をする。参照型ということか?)として扱われる。

 逆に言うと、flashは型指定をすれば比較的素直に動いてくれるので、まだわかりやすい方か。





引数の扱い

 個人的になぜ問題として扱われないのか最大の疑問点がココ。

自前関数に引数として放り込むと、「勝手にobj型(参照型)として扱われる」。

…と思ったけど、参照型のときだけか?これは。

 参照型を引数として渡すと、勝手に基本の参照型になります。

なので、

Date dt = new Date(2000,1,1);

function GetYear( year )
{
    return year.getYear(); // ←エラー
}

で、エラーに…ならないな…アレ?(汗)

もしかしてブラウザ依存なんですか…そうですか。

 いや、以前会社で書いた時は、上記ですらエラーになったけど、

function GetYear( year )
{
    Date d = year;
    return d.getYear(); // ←OK
}

これだと通ったので、一旦該当する型に代入してやらないといけないかなと思ってたんだけど…。




*1:mixiアプリ自体はJavascript主体です。が、flashを貼り付けることが可能なため、自由度の比較的高いこちらの手法の方がよく見る…気がする。