[AS3] CodeZine「Java と ActionScript 3.0 の違い:文法編」 [Edit]

Adobeの上条晃宏氏がCodeZineに「Java と ActionScript 3.0 の違い:文法編」を書かれました(Flexデベロッパーセンターより再掲)。興味深い記事ですので、ActionScript 3.0について気づいたことを少し付け加えてみます。

null,undefined,NaN,

値がundefinedになる場合としては、存在しない配列エレメントやvoidの戻り値もあります。

var _array:Array = [];
trace(_array[0]);  // 出力: undefined
trace(test());  // 出力: undefined
function test ():void {
}

プリミティブ型

プリミティブでは、String型のデフォルト値nullであることに注意が必要です。String以外のたとえばint型であれば、デフォルトでもintクラスのメソッドが使えます。

var i:int;
trace(i.toPrecision(2));  // 出力: 0.00

ところが、String型のデフォルト値nullに対しては、プロパティやメソッドにアクセスできず、ランタイムエラーになります。

var _str:String;
trace(_str.toLowerCase());
// 出力:
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

また、nullString型のプロパティに設定することもできません

キャスト

数値の型の間では、自動的に変換が行われます。たとえば、Number型の値をint型の変数に入れれば、整数に変換されます(とはいえ、きちんと型変換することが安心です)。

var f:Number = 5.5;
var i:int = f as int;
trace(i);  // 出力: 0
i = f;
trace(i);  // 出力: 5

また、Arrayクラスについては、Array()関数でキャストすることはできません。このときは、as演算子を使いましょう

instanceof

instanceof演算子は、ActionScript 3.0でも一応は使えます。ただし、is演算子を用いるよう警告されます。また、instanceof演算子では、インターフェイスの実装は調べられません。

var _mc:MovieClip = new MovieClip();
trace(_mc is IBitmapDrawable);  // 出力: true
trace(_mc instanceof IBitmapDrawable);  // false

ジェネリクスとコレクション

Flash Professional CS5からは、エレメントを納めたVectorインスタンスが生成できるようになりました。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事