それをするには、もっとたくさんのコードが! 私がオンラインや会話で繰り返し聞いた、1つの最終的な ActionScript 3.0 の誤解は、以下の通り:
「ActionScript 3.0 は本当にクールだ。しかし、もっと冗長でなかったらばよいと思う! 簡単なことをするのに書くコードが多いよ!」
私が定期的に見る、ActionScript が冗長であるという証拠として出される2つの例がここにあります:
1) ActionScript 1.0 と ActionScript 2.0 で URL にアクセスするためにこのコードを使用:
getURL("http://www.moock.org");
ActionScript 3.0では、このコードを使用:
navigateToURL(new URLRequest("http://www.moock.org"));
2)ActionScript 1.0 と ActionScript 2.0 で .swf ファイルをムービークリップの中にロードするために、このコードを使用:
someClip.loadMovie("foo.swf");
ActionScript 3.0では、このコードを使用:
var loader:Loader = new Loader();
loader.load(new URLRequest("foo.swf"));
someClip.addChild(loader);
前の2つの例では、ActionScript 3.0 のコードは、以前のコードより長いです。
しかし、それらの2つの単発的な例は、一般的な傾向を意味しません。
私自身のプログラミングにおいて、ActionScript 3.0 が、概して ActionScript 2.0 または ActionScript 1.0 より冗長な言語でないとわかっています。
例えば ActionScript 3.0 では、テキストフィールド、ボタン、またはムービークリップを製作するために要求されるコードは、ActionScript 2.0 と ActionScript 1.0 とほぼ同じ長さです。
ここに ActionScript 3.0 のコードと以前のコードの間の違いの全体的な特色を伝える、ひとつの例があります:
// ActionScript 1.0 と ActionScript 2.0
someClip.createTextField("t", 1, 0, 0, 0, 0);
t.border = true;
t.text = "hello world";
// ActionScript 3.0
var t:TextField = new TextField();
t.border = true;
t.text = "hello world";
someClip.addChild(t);
明らかに、ActionScript 3.0 のコードの中に、16のキーストロークが存在します。
しかし、私は新しい ActionScript 3.0 が、それらの小さい違いを補う以上のものを構築するとわかっています。
たとえば、ActionScript 3.0 でテキストフィールドをもう一つのムービークリップへ移動したいならば、こうします:
someOtherClip.addChild(t);
ActionScript 1.0/2.0 では、直接テキストフィールドを動かすことができないので、目的のムービークリップの中で新しいテキストフィールドを作り、それから、最初のテキストフィールドの特徴を新しいテキストフィールドへコピーする関数を書かなければなりません。
それは、ActionScript 3.0 では記述する必要がない、多くの余分な(そして、複雑な)コードです。
同様に、正規表現とイベントのようなものは、ActionScript 3.0 のネイティブな部分です。しかし、ActionScript 1.0 と ActionScript 2.0 では、余計な時間とコードを費やして、あなた自身が実現する方法を書くか、誰かの実現方法をリサーチしなければなりません。
さらに、実はActionScript 3.0が、以前のものよりも冗長でない多数のケースが存在します。
E4X(XML を働かせるための ActionScript 3.0 システム)を考えてみてください。
このような XML ドキュメントから、情報を検索したいと思ってください:
<STAFF>
<EMPLOYEE>
<NAME>Marco</NAME>
<MANAGER>James</MANAGER>
</EMPLOYEE>
<EMPLOYEE>
<NAME>Graham</NAME>
<MANAGER>James</MANAGER>
<EMPLOYEE>
<EMPLOYEE>
<NAME>James</NAME>
<MANAGER>Dorian</MANAGER>
</EMPLOYEE>
</STAFF>
ActionScript 2.0 または ActionScript 1.0 で、2番目の従業員の名前を検索したいならば、こうします:
staff.firstChild.childNodes[1].firstChild.firstChild
ActionScript 3.0 では、こうします:
staff.EMPLOYEE[1].NAME
ActionScript 3.0コードはより短くて、より直観的です。
さて、ジェームズが管理しているすべての従業員のリストをもらいたいと思ってください。
ActionScript 2.0 または ActionScript 1.0 では、こうします:
var managedByJames = new Array();
for (var i = 0; i < staff.firstChild.childNodes.length; i++) {
if (staff.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue
== "James Porter") {
managedByJames.push(staff.firstChild.childNodes[i]);
}
}
ActionScript 3.0 では、こうします:
staff.*.(MANAGER == "James Porter")
ActionScript 3.0 のコードは、非常に短く、ずっと直観的です。
単発的に並んでいるコードの長さの比較では、ActionScript 3.0 は時々勝って、時々負けます。
しかし私自身のコードで、システムのロジックが、より簡潔、かつ少しの回避方法で表現できるので、ActionScript 3.0 のきれいな構造が、一般的に短いプログラムを生むことがわかりました。
私は、信じたい今、私は、あなたが私のポイントを理解したと信じています:
FutureSplash として知られていた頃から Flashを使っていた開発者が、ActionScript 3.0 を避ける良い理由を、私は全然見つけることができません。
タイムライン上の単純なスクリプトをまだ使うことができますし、基本を学ぶのはかなり簡単で、ActionScript 2.0 または ActionScript 1.0 よりも、明らかに冗長であるということが見つかりません。
それどころか、一旦 ActionScript 3.0 を学び始めれば、クリーンな API と Flex Builder のコーディングアシスタンスが利用できることで、よりすばやくプログラムを作成でき、メンテナンスも簡単であることを発見しました。
新しい言語に含まれる(本稿で名前が挙がっていない)私が評価する他のもの:
・ActionScript 2.0 よりもずっと速度が速い
・バイナリソケットやバイナリデータにアクセスする
・改善されたテキストメトリック
・sound spectrums へのパラメトリックアクセス
・Flash CS3 で生み出す資産の統合
(
http://moock.org/lectures/ActionScriptAndFlashCS3/を参照)
・無料のコンパイラや開発フレームワーク
そして、もう50個はここにあります:Grant Skinner によって数え上げられた、『
Reasons ActionScript 3.0 Kicks Ass』
私のアドバイス?
もし、あなたがあまりに複雑であることを心配して、まだ ActionScript 3.0 に挑戦しないならば、どうかその宣伝を信じないでください。
あなた自身が好意を持って、毎日の仕事で1ヵ月間、心から ActionScript 3.0 を試してみてください。
それから、あなたがそれが好きかどうか、あなた自身で決めてください。
あなたが失望することを、私はとても信じないでしょう。