[AS3] 変数には初期値を与える [Edit]

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が示される
FF1007311_001.gif

データ型を定めた変数に初期値を与えないと、値はそのデフォルト値として扱われます。String型変数のデフォルト値はnullです。nullは、値(オブジェクト)がないことを示す特別なデータ型です。

値(オブジェクト)がなければそのオブジェクト(クラス)のプロパティやメソッドにアクセスできないことは、おそらく納得できるでしょう。しかし、String型の場合には、そのデフォルト値であるnullをString型のプロパティに設定することも許されないのです[*1]

釈然としない点はあるでしょう。けれども、初期値たとえばString型なら空文字列""を与えれば解消できる問題です。また、エラーは起こらなくても、Number型データのデフォルト値NaNのように、そのままでは処理を続けることが難しい場合も少なくありません[*2]。変数宣言では、型指定とともに初期値を与えるよう心がけるのがお勧めです。


[*1] String型のデータは、プリミティブ値とオブジェクトの中間的な扱いをされます。詳しくは「Stringはプリミティブ値かオブジェクトか」をお読みください。

[*2] この意味では、ActionScript 2.0でも初期値は与えておく方が望ましいといえます(「Flash MX 2004でハマりがちな問題点」参照)。

コメント

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

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

その他の記事