[AS3] コンストラクタメソッドとコンストラクタ関数 [Edit]

「コンストラクタ」は、インスタンスを生成するためのクラスの特別な関数です。そして、クラスに定義された関数はメソッドと呼びます。したがって、「コンストラクタメソッド」と呼ばれることもあります。広い意味では関数つまりfunctionですので、「コンストラクタ関数」と呼んでも差支えはありません。

[ヘルプ]の[ActionScript 3.0のプログラミング]でも、「コンストラクタメソッドは、単にコンストラクタと呼ばれることもあり、定義されたクラスと同じ名前を共有する関数です」と説明しつつ、サンプルスクリプトの変数についてその「初期値は、コンストラクタ関数内で設定します」と述べています([ActionScriptのオブジェクト指向プログラミング] > [クラス ] > [メソッド])。

しかし、ActionScript 1.0にはclassキーワードが備わっておらず、タイムラインに記述した関数(function)を使ってクラスの機能を実現しました。[ActionScript 3.0 のプログラミング]には、「ActionScript 1.0では、たとえば、classキーワードが存在しなかったので、"クラス" はコンストラクタ関数で定義されました」([ActionScript言語とシンタックス] > [関数])と説明されています。また、「ActionScript 1.0でクラスを作成するには、クラスのコンストラクタ関数を定義します」([ActionScriptのオブジェクト指向プログラミング] > [高度なトピック])というのも、タイムラインに記述する関数を指します。これらのコンストラクタ関数は、したがって狭義の関数を意味します。

ActionScript 2.0では、コンストラクタは[ActionScript 2.0の学習]の[コンストラクタ関数について]という項([関数とメソッド] > [関数とメソッドについて] > [メソッドと関数の種類について])で解説されています。ActionScript 2.0には、classキーワードが実装されました。しかし、内部的には1.0と同じクラスの仕組みを使っていますので、コンストラクタがメソッドか関数か判断は微妙でしょう[*1]

いずれにしても、ヘルプでもコンストラクタメソッドとコンストラクタ関数を、それほど厳密に使い分けている訳ではなく、神経質になる必要はないと考えられます。


[*1] ActionScript 2.0と1.0のクラス定義と継承の比較については、「ActionScript 2.0と1.0の継承について」をお読みください。

コメント

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

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

その他の記事