配列内の要素の型を厳しくチェックする

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(); //エラー

このようにすれば、コンパイル時にエラーを拾うことができる。