今回から数回,ActionScriptを使ううえでの一つの分岐点となる「自作クラス」の作り方をご紹介します。皆さんも「クラスを使ったオブジェクト指向プログラミング」というような言葉を少なからず聞いたことがあるかと思います。そう,その「クラス」なのです。ActionScriptでは,自分なりにデータ(プロパティ)とその処理(メソッド)をひとまとめにして使いやすくした「クラス」を作成し,利用することができます。

 このクラスを,どうやってご紹介したものかと悩んだのですが,幸いにして本講座の読者の方々は,今までの記事で,基本的な「変数」や「関数」の使い方を理解されているかと思います。そこで,今までのプログラミング・スタイルの延長線上として,クラスを使ったプログラミングの長所と短所,そして具体的なコードをご紹介する方向からアプローチさせていただこうかと思います(*1)。

 とはいえ,真面目な連載ではなく(本当にごめんなさい),お気楽な記事ですので,筆者なりに変な例え話やヨタ話を織り交ぜながらご紹介させていただきます。お昼休みや,業務の合間に,お茶でも飲みながら気楽に読んでいただき,読者の皆様にActionScript2.0でのクラスを使ったプログラミングのイメージを持っていただければ幸いです。何回かに分けて,順番にいろいろな特徴をご紹介していきますので,よろしくお願いします。

 第1回目のテーマは,「クラスって,どういうもの?」という疑問に対する,筆者なりの最初の答え「クラスって,お気に入りの処理をまとめて使いやすくしたものなんですよ」。それでは,行ってみましょうか。

クラス・プログラミングは召喚魔法?

 突然ですが,皆さんは魔法の出てくるお話やゲームは好きですか? 筆者は大好きです。さらにもう一つ,料理は大好きですか? 筆者は作るのも食べるのも大好きです。クラスを使ったプログラミングというのは,魔法や料理によく似ているところがあるのです。

 図1のムービーは,「クラスを使ったプログラミング・スタイル」がどういうものであるかを簡単にイメージしたものです。

図1: クラスを使ったプログラミングの特徴(クリックするとムービーを表示します)

 クラスを使ったプログラミングや,オブジェクト指向プログラミングと聞くと,まるで別世界のお話で,とたんに難しい物に思えて敬遠してしまう方もいます。でも,実際は変数と関数を使ってきた今までのプログラミング・スタイルと別世界の話というわけではありません。むしろ,その延長線上にあるものなのです。

 表1に,プログラミング・料理・ゲーム等の魔法の類似点をまとめてみました。今回学習する「クラス」は表1の「ステップ3」に位置します。

表1: クラスを使ったプログラミングのイメージ
ステッププログラミングで言うと?料理で言うと?魔法でいうと?
11行ごとのステートメント一つひとつの調理手順長々と唱えられる呪文
2関数名でまとめられた処理(関数・サブルーチン)料理名をキーにまとめられたレシピ魔法の名前でまとめられた巻き物(スクロール)
3クラスにまとめられた処理に力を借りるシェフを呼んで作ってもらう精霊などを召喚して力を借りる

 お料理や魔法の類似点と比べてみると,一つ気がつくことがありますね。ステップ1とステップ2は,「自分で何かをする」のに対し,ステップ3は「誰かに処理をやってもらう」というような感覚で理解できそうです。この「やってもらう」という感覚がクラスを使ったプログラミングの一つのポイントとなってきます。

別のファイルにコードをまとめる

 クラスを使ったプログラミングのポイントの一つは,「いろいろ使い回しができそうな処理を別のファイルへとまとめておく」ことです。この処理がまとめられたものが「クラス・ファイル」となります。

 実際のファイルとしては,図2のように,「クラス・ファイルの処理を利用するFlashドキュメント」と,「任意の処理がまとめられているクラス・ファイル」という二つのファイルを作成することになります。

図2: Flashドキュメントとクラス・ファイル

 Flashドキュメントの視点から見てみると,クラス・ファイルに任意の処理の一部を「やってもらい」,その結果を利用して自分の希望の処理を進めていくことになりますね。このとき,クラス・ファイルというのは,独立した一つのファイルですので,特定のFlashドキュメントからしか利用できないわけではありません。複数のFlashドキュメントから好きなように利用できます。

 例えば,三つの同じような処理をするFlashドキュメントに対し,一つのクラス・ファイルを使いまわして利用するといったことが可能です(図3)。

図3: 一つのクラス・ファイルの処理を複数のFlashドキュメントで使う

 汎用的な処理を特定のクラス・ファイルにまとめておけば,その処理の部分はクラス・ファイルのコードを流用し,いろいろと使い回しができるというわけですね。

実際にクラス・ファイルを作ってみよう

 では,クラス・ファイルというものは,どのようにして作成し,どのようにして保存すれば良いのでしょう? また,どういったコードを書けばいいのでしょうか?百聞は一見に如かず,実際に作成してみましょう。

 まず,新規Flashドキュメントを作成し,任意のフォルダに保存します。今回は「restaurant.fla」(*2)という名前で保存してみました。次に,[ファイル]-[新規]を選択して表示される[新規ドキュメント]ダイアログボックスから「ActionScript(AS)ファイル」を選択します(図4)(*3)。

図4: 新規ASファイルを作成する

 すると,図5のように,Flash全体が一つのアクションパネルのような画面に切り替わります。この画面はクラス・ファイル等の外部ActionScriptファイルを編集する専用の「スクリプトウィンドウ」と呼ばれるものです。

図5: スクリプトウィンドウ

 スクリプトウィンドウでも,通常のFlashドキュメントと同じように,タイムライン上部のタブを使って,FlashドキュメントとASファイルの表示を切り替えることができます。

 さて,今作成した新規のActionScriptファイルをとりあえず保存してみましょう。先ほど保存したFlashドキュメント「restaurant.fla」と同じフォルダ内に「Chef.as」という名前で保存します。フォルダ内は,図6のようにFlashドキュメントとクラス・ファイルとして使用する拡張子「*.as」のファイルが存在しています。

図6: 同一フォルダ内に保存する

 これで準備はOKです。

 次に,実際にクラスの記述をしてみましょう。まずはこのActionScriptの内容がクラスとして認識されるように,クラスであることを宣言します。これは,以下のような決まった形式があります。

class クラス名{
  //内容
}

 「class」に続けてこのクラスの名前である「クラス名」を記述し,さらに,「{」と「}」で囲みます。ActionScriptでは「{」と「}」で囲った部分はひと固まりの処理として認識されるので(*4),この書式で『「{」から「}」までに書いてあることは『クラス名』としてまとめてある処理ですよ」という意味になるわけですね。

 さて,ここで一つ注意点があります。それはクラス名の付け方です。ActionScript2.0では,クラス名と,ファイル名は同一の名前にしなくてはいけないというルールがあります。

 先ほど,このファイルは「Chef.as」という名前で保存しましたね。ですので,必然的にこのクラスのクラス名は「Chefクラス」となります(*5)。このことを踏まえ,実際にコードを書いてみると,Chefクラスの基本的なコードは,図7のようになります。

図7: クラス・ファイルの基本的なコード

 あとは,「{」と「}」の中に関数を書いていくだけです。

関数の記述方法はFlashドキュメントと同じ