[AS3] 配列のインデックスを式で計算したときはuint型で渡す [Edit]

配列やVectorインスタンスのエレメントを扱うとき、インデックス番号を式で与えることがあります。その場合、配列アクセス演算子[]に式を直接書込むのでなく、uint型に変換(キャスト)するか、式の値はuint型の変数に入れたうえでその変数を渡すようにしましょう。その方が、書く手間は少し増えても、処理が速まります。

[1] 配列アクセス演算子[]にインデックスとして式を直接書込んだとき、その式の値のデータ型は決まっていません。この場合、エレメントの扱いが遅くなるようです。

var my_array:Array = [0, 1, 2];
var i:uint = 0;
var element:int = my_array[i + 1];  // 配列アクセス演算子に式を直接記述

[2] uint()関数は、引数の数値をuint型に変換(キャスト)します。式をuint()関数の引数に渡したうえで、その値を配列アクセス演算子[]に指定すればデータ型が定まります。

var element:int = my_array[uint(i + 1)];  // 式はuint()関数でキャストする

[3] uint型の変数を宣言して、式の値はその変数に入れたうえで、配列アクセス演算子[]にはその変数を渡すことも考えられます。

var n:uint = i + 1;  // 式の値をuint型の変数に入れる
var element:int = my_array[n];

3つのやり方を、配列とVectorインスタンスについて、それぞれ比べてみました。式が極めて単純ですし、環境によっては差が出ないこともあるでしょう。

Setting a computed number to an element of Array - wonderfl build flash online

なお、式の値をas演算子で評価した場合は、かえって処理が遅くなりました。

コメント

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

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

その他の記事