[AS3] 配列(Array)にキャストする [Edit]

あるデータ型の値を異なるデータ型として用いる場合には、データ型の「明示的な変換」(キャスト)を行います。配列すなわちArray型へのキャストには、別途注意すべき点があります。

キャストの原則

値を異なる型にキャストするには、変換したいデータ型のクラス名に続けて、その値を括弧()で括ります。

var 変数:クラス = クラス(変換する値)

たとえば、以下のスクリプト001は、浮動小数値と文字列の数字を、それぞれint型にキャストします。intは整数型ですので、小数点以下の値は切捨てられます。

スクリプト001■NumberとString型のデータをint型にキャスト

// フレームアクション
var n:Number = 1.5;
var n_str:String = "1.6";
var i0:int = int(n);
var i1:int = int(n_str);
trace(i0);   // 出力: 1
trace(i1);   // 出力: 1

配列(Arrayインスタンス)のキャスト

配列すなわちArrayクラスでは、前述の方法でキャストすることはできません。Array()関数は新規の配列(Arrayインスタンス)作成し、引数の値をその最初(インデックス0)のエレメントに加えてしまうからです(スクリプト002)。

スクリプト002■Array()関数は引数がエレメントとなった配列を返す

// フレームアクション
var oArray:Object = ["one", "two", "three"];
// Array()関数を使用
var my0_array:Array = Array(oArray);
trace(my0_array.length);   // 出力: 1
trace(my0_array[0]);   // 出力: one,two,three

上記スクリプト002は、Array()関数がエレメント数(Array.lengthの値)1の配列を作成し、そのエレメント(インデックス0)は引数として渡された配列oArrayであることを示しています。

配列のキャストには、as演算子を用います(スクリプト003)[*1]

スクリプト003■Array()関数は引数がエレメントとなった配列を返す

// フレームアクション
var oArray:Object = ["one", "two", "three"];
// as演算子を使用
var my1_array:Array = oArray as Array;
trace(my1_array.length);   // 出力: 3
trace(my1_array[0]);   // 出力: one

上記スクリプト003は、Object型のデータがas演算子によりArray型として評価され、もとのデータと同じエレメント数(Array.length値)の配列と認識されたことを示しています。


[*1] 通常のキャストにも、as演算子を用いることはできます。ただし、小数点以下を切捨てたり、文字列を数値に変換したりといった、データそのものを変更することはできません。詳しくは、前掲リンクの「as演算子」をご参照ください。

コメント

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

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

その他の記事