ActionScript 2.0から、変数および関数の引数や戻り値にはデータ型が指定できます。とくに、ActionScript 3.0では、データ型を定めることにより、動作が最適化されます。したがって、変数宣言には必ずデータ型を添えるべきでしょう。加えて、変数には初期値も与えておくのが安心です。
変数に初期値を与えないためにハマる例としては、文字列つまりString型が挙げられます。つぎのスクリプト001は、TextFieldインスタンスをつくり、TextField.textプロパティにString型の変数値を代入します。
スクリプト001■TextField.textプロパティに初期値のないString型変数値を代入var my_txt:TextField = new TextField(); var my_str:String; // 初期値なし my_txt.text = my_str;
String型の変数に初期値が与えられていませんので、意味のある結果になりそうもないという予感はします。ただ、それ以外はごく普通の処理です。ところが、結果の意味どころでなく、ランタイムエラー#2007が出て、正しく実行することができません(図001)。
図001■ランタイムエラー#2007が示される
データ型を定めた変数に初期値を与えないと、値はそのデフォルト値として扱われます。String型変数のデフォルト値はnullです。nullは、値(オブジェクト)がないことを示す特別なデータ型です。
値(オブジェクト)がなければそのオブジェクト(クラス)のプロパティやメソッドにアクセスできないことは、おそらく納得できるでしょう。しかし、String型の場合には、そのデフォルト値であるnullをString型のプロパティに設定することも許されないのです[*1]。
釈然としない点はあるでしょう。けれども、初期値たとえばString型なら空文字列""を与えれば解消できる問題です。また、エラーは起こらなくても、Number型データのデフォルト値NaNのように、そのままでは処理を続けることが難しい場合も少なくありません[*2]。変数宣言では、型指定とともに初期値を与えるよう心がけるのがお勧めです。
[*1] String型のデータは、プリミティブ値とオブジェクトの中間的な扱いをされます。詳しくは「Stringはプリミティブ値かオブジェクトか」をお読みください。
[*2] この意味では、ActionScript 2.0でも初期値は与えておく方が望ましいといえます(「Flash MX 2004でハマりがちな問題点」参照)。