サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

2. クラスの使用 − シンプルな例

ID: FN0310003 Product: Flash

Platform: All
Version: Flash MX 2004

2.1 クラスの使用例
オブジェクト指向プログラミングになじみのない方のために、本節ではFlashでクラスを作成して使用するワークフローの概要をご紹介します。最低限ワークフローには、つぎのステップが含まれます。

(1) 外部ActionScriptクラスファイルでクラスを定義する

(2) クラスファイルを、所定のクラスパスのディレクトリ(Flashがクラスを検索する場所)に保存する

(3) クラスのインスタンスを、Flashムービー(FLA)や外部スクリプトファイルなど、他のスクリプトで作成する。または、元のクラスからサブクラスを作成する。

またこの節では、ActionScript 2の新たな機能であるいわゆる「厳密な型指定」(strict data typing)についても解説します。これは、変数や関数の引数、関数の戻り値にデータ型を指定できる機能です。

この節ではもっぱらクラスを扱います。しかし、その大枠のワークフローは、インタフェースを使用する場合も同様です。詳しくは、「5. インタフェースの作成と使用」をご参照ください。

2.2 クラスファイルの作成
クラスを作成するには、まず外部ActionScript(AS)ファイルを作成する必要があります。クラス(およびインタフェース)は、外部スクリプトファイルにのみ定義することができます。たとえば、クラスの定義を、Flashムービー(FLA)のフレームアクションやButtonアクションで行うことはできません。外部ASファイルを作成するには、FlashのActionScriptエディタや好みのコード/テキストエディタを使用します。

注記: 外部ファイル中のActionScriptのコードは、FLAファイルのパブリッシュや書き出し、ムービープレビュー、デバッグする際に、SWFファイルにコンパイルされます。したがって、外部ファイルに変更を加えたときは、そのファイルを保存して、コードを使用しているFLAファイルはすべてもう1度コンパイルしなければなりません。

以下のステップでは、Personというクラスを作成します。このクラスには、2つのプロパティ(ageとname)があり、またこれらの値を[出力]パネルに表示するメソッド(showInfo())をひとつもっています。

クラスファイルを作成する
(1) ハードディスクに新規フォルダを作成し、PersonFilesと名前をつけます。このフォルダにプロジェクトのファイルすべてを格納します。

(2) 以下のいずれかを実行します。
・好みのテキスト/コードエディタで、新規ファイルを作成します。
・(Flash MX Professionalのみ)[ファイル] > [新規]を選択して、[新規ドキュメント]ダイアログボックスを開きます。ファイル[タイプ]のリストから、[ActionScriptファイル]を選択します。そして、[OK]ボタンをクリックします。スクリプトウィンドウに空白のファイルが開きます。

(3) ファイルにPerson.asという名前をつけて、PersonFilesフォルダに保存します。

(4) スクリプトウィンドウで、以下のコードを入力します。

class Person {
}

これを、クラス「宣言」(declaration)といいます。もっとも基本的な形式では、クラス宣言には'class'キーワードがあり、続けてクラス名(この場合はPerson)を書きます。そして、その後にひと組の中括弧('{}')を記述します。中括弧の中身をクラス本文(class body)といいます。ここに、クラスのプロパティやメソッドを定義します。

注記: クラス名(Person)は、定義を書いたASファイルの名前(Person.as)と一致しなければなりません。これは、とても重要な点です。2つの名前が一致しないと、クラスはコンパイルされません。

(5) プロパティをPersonクラスに作成するには、'var'キーワードを使用して、2つの変数名ageとnameを以下のように定義します。

class Person {
  var age:Number;
  var name:String;
}

Tip: 慣習としてクラスのプロパティは、クラス本文の冒頭に定義します。これは、コードをわかりやすくするためです。必須の条件ではありません。

変数の宣言に使用されているコロンシンタックス(var age:Numberおよびvar name:String)にご注目ください。これはデータの厳密な型指定(data typing)の例です。変数をこの方法(var variableName:variableType)で型指定すると、ActionScript 2.0コンパイラはその変数に設定される値が指定した型に合致するかどうかを確認します。このシンタックスは、必ずしも使用しなければならないものではありません。しかし、実践する価値があり、スクリプトのデバッグもしやすくなります(詳しくは、オンラインヘルプの「厳密な型指定」をご参照ください)。

[訳者註] 型指定をすると、その変数にはコードヒントが表示されます。

(6)つぎに、showInfo()メソッドを作成しましょう。このメソッドは、決められたフォーマットで、ageとnameプロパティの値を内容とするストリングを返します。showInfo()関数の定義を、以下のようにクラス本文に追加します。

class Person {
  var age:Number;
  var name:String;

  // プロパティ値を返すメソッド
  function showInfo():String {
    return ("Hello, my name is "+name+" and I'm "+age+" years old.");
  }
}

関数の定義に、データ型指定(任意ですが推奨されます)が用いられていることにご注目ください。

function showInfo():String {...}

この場合に型指定されているのは、showInfo()関数の戻り値(ストリング)です。

(7) この節で最後に追加するコードは、「コンストラクタ関数」(constructor function)という特別な関数です。オブジェクト指向プログラミングでは、コンストラクタ関数はクラスの新たなインスタンスを初期化します。

コンストラクタ関数は、つねにクラスと同じ名前にします。クラスのコンストラクタ関数を作成するには、以下のコードを加えます。

class Person {
  var age:Number;
  var name:String;

  // プロパティ値を返すメソッド
  function showInfo():String {
    return ("Hello, my name is "+name+" and I'm "+age+" years old.");
  }

  // コンストラクタ関数
  function Person(myName:String, myAge:Number){
    name = myName;
    age = myAge;
  }
}

コンストラクタ関数Person()は、2つの引数、myNameとmyAgeを取ります。そして、これらの引数を、それぞれnameとageプロパティに設定します。関数の2つの引数は、それぞれStringとNumberに厳密に型指定されています。コンストラクタ関数について、詳しくは「3.5 コンストラクタ関数」をご参照ください。

注記: コンストラクタ関数を作成しないと、空の関数がコンパイル時に自動的に作成されます。

(8) ファイルをPerson.asとして、(1)で作成したPersonFilesフォルダに保存します。

(Flash Professionalでなく)Flash MX 2004をお使いの場合は、次節「2.3 Personクラスのインスタンスを作成する」をご覧ください。

(9) (Flash Professionalのみ)クラスファイルのシンタックスをチェックします。[ツール] > [シンタックス]を選択するか、キーボードから[Ctrl]+T(Windows)または[command]+T(Macintosh)を押します。

もしエラーが[出力]パネルに表示されたら、入力したスクリプトのコードと上記(7)の最終的なコードとを比較します。コードのエラーが解決できないときは、[Help]パネルから(7)のコードすべてをコピーしてください。

2.3 Personクラスのインスタンスを作成する
つぎのステップは、Personクラスのインスタンスを、Flashムービー(FLA)のフレームスクリプトや他のASスクリプトなど別のスクリプトから作成します。そして、そのインスタンスを変数に設定します。独自のクラスからインスタンスを生成するには、'new'演算子を使用します。これは、定義済み(built-in)ActionScriptクラス(XMLやTextField[*1]クラスなど)のインスタンスを生成するのと同様です。

[訳者註*1] TextFieldインスタンスは、'new'演算子で作成することはできません。インスタンスのダイナミックな生成には、'MovieClip.createTextField'メソッドを使います(なお、「Flash MX 2004ヘルプ正誤表」参照)。

たとえば、以下のコードは、Personクラスのインスタンスを作成し、それを変数newPeronに設定します。

var newPerson:Person = new Person("Nate", 32);

このコードはPersonクラスのコンストラクタ関数を呼出し、引数として"Nate"と32という値を渡しています。

変数newPersonが、Personオブジェクトとして型指定されています。オブジェクトをこのように型指定すると、コンパイラはこのクラスに定義されていないプロパティやメソッドにアクセスしていないかどうか確認することができます(例外として、'dynamic'キーワードを使ってクラスを動的と宣言した場合があります。詳しくは、「10. ダイナミックなクラスの作成」をご参照ください)。

FlashムービーでPersonクラスのインスタンスを作成する
(1) Flashで[ファイル] > [新規]を選択し、[タイプ]のリストから[Flashドキュメント]を選び、[OK]ボタンをクリックします。

(2) ファイルにcreatePerson.flaという名前をつけて、すでに作成してあるPersonFilesフォルダに保存します。

(3) タイムラインのレイヤー 1を選択して、[アクション]パネルを開きます([ウィンドウ] > [開発パネル] > [アクション])。

(4) [アクション]パネルに、以下のコードを入力します。

var person_1:Person = new Person("Nate", 32);
var person_2:Person = new Person("Jane", 28);
trace(person_1.showInfo());
trace(person_2.showInfo());

上記のコードは、Personクラスのインスタンスを、person_1とperson_2の2つ作成しています。そして、それぞれのインスタンスに対してshowInfo()メソッドを呼出しています。

(5) ファイルを保存したら、[制御] > [ムービープレビュー]を選択します。[出力]パネルには、つぎのように表示されます。

Hello, my name is Nate and I'm 32 years old.
Hello, my name is Jane and I'm 28 years old.

コンストラクタ関数を呼出してクラスのインスタンスを作成するとき、Flashはコンストラクタと同じ名前のActionScriptファイルを予め決められた一連のフォルダの場所から探し出します。この一連のフォルダの場所は、まとめてクラスパス(classpath)と呼ばれます(詳しくは、「6. クラスパスの考え方」をご参照ください)。

これで、Flashムービーでクラスをどのように作成・使用するかの大まかな考え方が理解できたでしょう。以降のこの章では、クラスやインタフェースについてさらに詳しく解説します。

出典
ActionScript Reference Guideより邦訳。

_____

作成者: 野中文雄
作成日: 2003年10月13日


Copyright © 2001-2003 Fumio Nonaka.  All rights reserved.