ActionScript では型付き配列 (typed array) がサポートされていない。もし実装するなら、以下のようになるだろう。要素を追加する際に constructor プロパティでふるいにかけている。
Typed Array
class TypedArray {
private var array:Array = null;
private var type:Function = null;
/**
* コンストラクタ
* @param type 要素の型
*/
public function TypedArray(type:Function) {
this.array = new Array();
this.type = type;
}
/**
* アイテムを追加する
* @param item 追加するアイテム
*/
public function push(item:Object):Void {
if (item.constructor == this.type) {
this.array.push(item);
} else {
throw new Error("Error : Invalid type.");
}
}
//その他のメソッド...
}
しかし、”そこまでする必要がない” プロジェクトでは、Array を使った方が生産性が高いだろう。
同じ型の要素を追加することを暗黙の了解として、要素を取り出す際に以下の項目に注意すれば、幾らか堅いコーディングができる。
- 配列アクセスをしない
- 取り出す際に型を指定する
配列アクセスをしない
配列アクセスは利便性が高い反面、配列の要素が Object として扱われるため、コンパイルエラーが検出されないというデメリットがある。
var hoge:Hoge = new Hoge(); var array:Array = new Array(); array.push(hoge); array[0].boo();
上記例の場合、Hoge クラスに boo というメソッドが無くてもエラーは出ない。
取り出す際に型を指定する
配列から要素を取り出す際に型を指定すれば、以後、要素を意図する型として扱うことができる。
var hoge:Hoge = new Hoge(); var array:Array = new Array(); array.push(hoge); var item:Hoge = array[0]; item.boo(); //エラー
もしくは型キャストで
var hoge:Hoge = new Hoge(); var array:Array = new Array(); array.push(hoge); Hoge(array[0]).boo(); //エラー
このようにすれば、コンパイル時にエラーを拾うことができる。