タイムライン上のvar宣言 [Edit]

変数に初期値を与えるとき、ふたつの書き方があります。これらは何か違いがあるのでしょうか?

i = 0;

var i = 0;

varステートメントは、その変数が初めて使われることを宣言します。つまり、iという名前(識別子)の変数が作成され、初期値として値0が代入されます。

もっとも、var宣言がなかったとしても、ActionScript(ECMASCript)は、その変数が未定義であれば自動的に作成してしまいます。したがって、上記ふたつのステートメントは、実質的な結果について違いがありません[*1]

ただ、他のプログラミング言語では、変数の宣言はむしろ必要とされる場合が多いです。また、varステートメントがあれば、それ以前にその変数の処理は存在しないことが見て取れます。したがって、プログラミング上の良い習慣(best practice)として、var宣言を用いるよう推奨されることもあります(Colin Moock『ActionScript第2版 −実践プログラミング−』p.42〜)。

ActionScript 2.0以降では、varステートメントに、変数のデータ型が指定できるようになりました。

var i:Number = 0;

コロン(:)の後に指定したデータ型以外の値を代入すれば、コンパイルエラーが発生して注意されます[*2]。上記ステートメントでは変数iはNumber型で指定されているので、たとえば文字列を代入しようとするとSWFが書出しできません。

ただし、MovieClip(またはButton)アクションやフレームアクションなどタイムラインに記述するスクリプトでは、データ型指定の効果は限定的で、あまり大きなメリットは得られません(Flash OOP Japan他『FLASH OOP − ActionScriptによるオブジェクト指向プログラミング』「1-1 厳密な型指定」p.010〜)。

しかし、ActionScript 2.0以降のクラス定義では、var宣言なしに変数(プロパティ)をクラス本体で扱うことはできません。ですから、いずれクラス定義を使うときのために、今からvarステートメントを用いるクセをつけておくことにも意味はあるでしょう。


[*1] 関数ブロック{}内では、varステートメントは「ローカル変数」の宣言になります。「ローカル変数」については、Flash ActionScript Helper「変数」(とくに「変数の種類」)をご参照ください。

[*2]「クラスの使用 − シンプルな例」参照。

その他の記事