home > 過去ログ(2004年以前) > ActionScript 1.0使いのためのActionScript 2.0入門: Part 1
2004/02/27

ActionScript 1.0使いのためのActionScript 2.0入門: Part 1


Joey Lott (www.person13.com)著
北沢 純 (FACEs Project)訳

ある程度FlashとActionScriptでの開発経験がある人達にとって、ActionScript 2.0 のアナウンスはかなり色々な意味で衝撃的なものだったと思われる。おそらくそこにはActionScript 2.0がもたらすことになる新しいフロンティアと新しい可能性に対する興奮があることだろう。なんといっても、これは"2.0"であり、改良や新たな開発成果が示されているに違いない。一方で、新しいシンタックスや新しい機能を覚えなくてはいけないのかと心配になって、コーナーに退却したり見て見ぬふりをしたくなるかもしれない。この記事では、皆さんの興奮を盛り上げてActionScriptに2.0に対する恐れをふりはらいたい。

まず最初に用語を確認しておこう。Flash 5とFlash MXで書くActionScriptはここではAcrionScript 1.0と呼ぶ。言い換えれば:

trace("ActionScript 1.0" == "Flash 5/MX ActionScript"); // 表示: true

ActionScript 2.0はFlash MX 2004とFlash MX Professional 2004の両方に含まれる新機能であり、多くの点において、ActionScript 1.0とほとんど同じ言語である。これは、ActionScript 1.0で習得したことのほとんどはActionScript 2.0でも適用可能である(もう安堵のため息がきこえてくる)。実際、これまでActionScriptでカスタムクラスを書いていなかったとすれば、ActionScript 1.0とActionScript 2.0の違いは無視しても良いほどのものだ。それに、ActionScript 1.0にこだわるファンにとっては、ActionScript 1.0を使ってアプリケーションを開発すると言う選択肢も残っている(ただ気を付けなければいけないのは、ActionScript 1.0とActionScript 2.0のコードを混ぜてしまうと、動くこともあれば動かないこともあるということだ)。

それではActionScript 1.0と異なっている、ActionScript 2.0の主要な新機能とはなんだろう? よくぞ訊いてくれました。

*強い型付け(Strong typing)
これは、変数をある一つのデータ型しか保持できないように宣言することができるということである。例えば、MovieClip型の変数、String型の変数、Color型の変数を宣言することができる。これは関数のパラメータにも適用される。強い型付けは、良いコーディング習慣を確実に身につけるのに役立ち、ActionScript 1.0での弱い型付けに起因する多くの間違いを取り除くことができる。
* 関数の返り値の型付け
これは強い型付けに似た機能である。関数が値を返す場合にその関数が返すべき値の型を指定することができる。関数が値を返さないようにしたい場合も、その関数が値を返さないように指定できる。この機能も同じくコーディングの間違いを避けるのに役立ち、強い型付けと連携して働く。例えば、String型を返す関数を宣言して、その値をNumber型として型付けされた変数に割り当てようとすると、Flashはエラーを出す。
* 正式なclassシンタックス
これはおそらくActionScript 2.0の新機能の中でもっとも大きなものだろう。ActionScript 1.0にはclassシンタックスが無く、代わりにprototypeを使っていた。ActionScript 2.0はclassメンバとしてpublic, private, staticをサポートし、継承、インタフェースもサポートしている。

これらはActionScript 2.0の主要な機能である。まだ読んでくれているなら、これらの点についてさらに検討してみよう。この記事のパート1では、強い型付けと、関数の返り値の型付けについて見ていく。新しく登場した正式なclassシンタックスは大きなトピックなので、パート2で扱う。

強い型付け

ActionScript開発者は長い間、弱い型付けに甘やかされてきた。ActionScript 1.0では、変数を宣言しそれに文字列型の値を割り当てたあと、その同じ変数に数字の値を割り当てるということが可能だったのだ:

var sProduct = "Flash MX 2004";
sProduct = 6;

もちろん、上記のような単純化された例をみれば、変数が持つ値の型はただ一つだけであるべきことは明らかだ。sProductという変数は常に"Flash MX 2004""Dreamweaver MX 2004"といった文字列の値を保持するが、6のような数値にはならない。これは確かに理にかなっている。やはり自分のアプリケーションでは、変数がアクセスされた時点で、そこで使用可能な型の値が返ってくることを当てにできる状態が望ましい。例えば、sProductの値をユーザに対して表示したいなら、それが確かに文字列型であって他のobjectや何かではないと信用できるということが重要だ。筋が通ってるでしょ?

ActionScript 1.0では、劣悪なプログラミング習慣や、変数に誤ったデータ型を割り当てる間違いに陥りやすい。アプリケーションのデバッグにおいては、間違ったデータ型が割り当てられている一行を特定するだけのために、沢山の時間が費されてきた。強い型付けは、ActionScript 2.0のコンパイル時の機能(つまり実行時にはデータ型を検証しない)であり、変数を特定のデータ型として宣言することができる。誤ってその変数に別のデータ型を割り当てようとすると、シンタックスチェック機能を使った時かもしくはアプリケーションをエクスポート/パブリッシュしようとした時にFlashがエラーメッセージを出して、コード内に型の不整合があることを知らせる。強い型付けを使って変数を宣言するためには、最初にvarキーワードを置いて、その後に変数名、コロン、データ型を置く必要がある。データ型は全て大文字で始まる。以下はsProductString型で宣言している例である:

var sProduct:String = "Flash MX 2004";

sProductString型で宣言されたあと、この変数に数値を割り当てようとすると、Flashはエラーを出す。例えば、このようにすると:

sProduct = 6;

以下のようなエラーが出力パネルに現われる:

**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 2:代入ステートメントでタイプが一致しません。Number が見つかりましたが、String が必要です。
sProduct = 6;


ActionScript エラー数 :1 報告済みエラー :1

varキーワードは、その変数を最初に宣言するときだけ使うようにしよう。その後でvarキーワードを使うと、Flashは新しい変数が宣言されているとみなす。Flashは同じ名前の新しい変数を生成して、元の変数を上書きしてしまう。例えば:

var sProduct = 6;

上のようなコードを書くと、FlashはsProductという新しい変数を生成する。この新しい変数には強い型付けが適用されない。このような場合新しい変数に対しては、元の変数の強い型付けによるチェックがなされず、何もエラーが出ない

強い型付けを使う場合は、コロンをタイプした後に出るデータ型リストのコードヒントを取得すべきだ。図 1はそれを示している。


図 1: 強い型付けのためのコードヒント

強い型付けのさらなる機能

強い型付けには少なくともあと二つの機能がある:

* 強い型付けはコードを明快にし、自分にも他人にとってもあとで読むのが楽になる。 我々は自分が考えていたことを覚えていられると考えがちだが、それは間違いだ。 もちろん、ちゃんとしたコメントと変数の命名規則は非常に重要ではあるが、 強い型付けは、特定の変数が何を意図しているかを明確化する助けになる。
* 強い型付けにより、コードヒント用の接尾辞がなくてもコードヒントがあらわれる。

強い型付けにより、コードヒント用の接尾辞がなくてもコードヒントがあらわれる。 多くの人にとって、Flash MXのコードヒントは非常に有用な機能だったが、 コードヒントを使うには常にコードヒントに対応した接尾辞を使う必要があった。 Flash MX 2004の強い型付けによって、自分の好みの命名規則を使いつつ コードヒントも出すということが可能になる。この記事全体を通して私は、 変数名の頭に1個か2個、もしくは3個の文字の接頭辞をつけるという、修正版ハンガリー記法 を使っている。例えば、前のセクションで私はsProductという変数名を使用した。 "s"という接頭辞はこれがString型の変数であることを示している。もちろん 接頭辞だけではFlashはそのことを知ることができない。しかし その変数に強い型付けを行えば、Flashは必要時に自動的に適切なコードヒントを 出す。ここで示す例では、変数をColorオブジェクトへの参照として宣言している。 よって、この後にその変数名とドットをタイプすると、コードヒントが出てくる。 図2にそれを示す。

図 2: コードヒントのもう一つの例

関数の戻り値型

ActionScript 2.0の関数では戻り値の型を宣言することができる。 これにより、自分の意図にしたがってコード内で一貫性が保たれている ことを保証できるメリットがある。関数の戻り値型を指定するには、 関数呼び出し演算子のとじ括弧のあとにコロンと戻り値型をつける 必要がある。これは強い型付けのシンタックスによく似ている。ここで示す例では、 関数の戻り値をNumberとして指定している:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

上の例では、関数の戻り値型が定義されているだけでなく、強い型付けがパラメータにも 適用されていることに気が付くことだろう。パラメータは本来変数なので、 関数を呼び出すときに誤ったデータ型を割り当てようとすれば、Flashはエラー を生成する。例えば:

trace(multiply(6, "Flash MX 2004"));

このコードは、2番目のパラメータが数値(Number)でなく文字列(String)なので 以下のようなエラーを出す:


**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 4:タイプが一致しません。
trace(multiply(6, "Flash MX 2004"));


ActionScript エラー数 :1 報告済みエラー :1

戻り値型の話しに戻ろう; 関数の戻り値型は二つの点において役に立つ。 正しい型を返し忘れたとしてもFlashがエラーメッセージを出してくれる。例えば、 以下のようなmultiply()を書いたとする:

function multiply(nA:Number, nB:Number):Number {
  return "Flash MX 2004";
}

この場合、以下のようなエラーが現われる:

**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 2:返された式は、関数の返されたタイプと一致する必要があります。
return "Flash MX 2004";


ActionScript エラー数 :1 報告済みエラー :1

これはなぜかというと、実際に返された値は、宣言されている戻り値型と合致していなければならないからだ。

さらに、関数の戻り値を変数の代入ステートメントに使用すると、Flashはそのデータ型同士が合致している しているかどうかをチェックする。例えば:

function multiply(nA:Number, nB:Number):Number {
  return (nA * nB);
}

var sProduct:String = multiply(6, 5);

上の例では、multiply()からの戻り値をStringとして型付けされた変数に 割り当てようとしている。multiply()の戻り値型は数値型(Number)なので、Flashは エラーを生成する:

**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 4:代入ステートメントでタイプが一致しません。Number が見つかりましたが、String が必要です。
var sProduct:String = multiply(6, 5);


ActionScript エラー数 :1 報告済みエラー :1

利点についての注釈

ここまでで、私達はActionScript 2.0の新たな機能である強い型付けと関数戻り値の 型付けについて検討してきた。このような機能を既にサポートしている他のプログラミング 言語(例えば、Java、C#、C++)の経験がある人にとっては、利点は明らかだ。しかし 強い型付けを持った言語の経験がない人にとっては、実際のところ窮屈で面倒になったように 思われるかもしれない。それではこれらの新機能の利点とは一体なんだろう?

新機能それぞれについてはここまでで論じてきたので、アプリケーション開発における、 強い型付けと関数戻り値の型付けの、潜在的な利点についてはいくつかヒントを すでに提示している。主要な利点としては以下のようなものがある:

* 間違って不正な代入を行ったことによるエラーが減る。 これは、コードを自分でデバッグしなくても、間違っている箇所の特定を 助けてくれるようなコンパイル時エラーが現われるという意味だ。
* より明快なコード、あるいは少なくともより明快なコードになり得る可能性だけでも。。。
* 優れたコーディング習慣の支援。信じられないかもしれないが、 優れたコーディング習慣は、実は開発者としてのあなたを支援するために 存在する。強い型付けと関数戻り値の型付けは、意図の明快な 優れたコードを書く助けになる。
* コードヒントに対応した接尾辞を必要としない、(変数に強い型付けをするための)コードヒント

Flashがコンパイル時にチェックを行わないものはたくさんあるということに注意しなければならない 強い型付けに関する議論の中で、我々は同じ変数を複数回宣言することが 可能であるような例を見てきた。これは良い習慣ではないし、強い型付けを行う言語のほとんどは このようなことをしようとするとエラーを出す。Flash MX 2004はActionScript 2.0をサポートした 最初のリリースであることを忘れないように。将来のバージョンではおそらくもっと多くの拡張 が行われるだろう。

結び

このチュートリアルが、ActionScript 2.0の新機能を、読者をあまり怖がらせることなく 紹介できていることを願いたい。パート2ではActionScript 2.0で導入された正式な classシンタックスを見ていく。


元URLはhttp://www.person13.com/articles/as2primerpartone/です。
日本語訳は、原著者であるJoey Lott氏の許可を得てFACEs Projectが行いました。


TOP | PART2 | PART3