4月14日(金)に開催された第21回 Flash OOP 勉強会に参加してきた。
Adobe の大崎オフィス初めて行ったけど綺麗だったなぁ。前と違ってミネラルウォーターが用意してあってびっくりした。せっかくお茶買って行ったのに……。上条さんの話が聴けたのはとても楽しかった。難しめの話なのに、時折ギャグを入れてくれるのでリラックスして聴くことができた。
ActionScript3.0(以下AS3)で個人的に便利になるなと改めて思ったのは、圧倒的に処理速度が向上するだけでなく、E4X という規格に対応しているので、ソースに XML 文書を書き込めるようになっている点。..オペレータなんてすごく使いやすそうだった。
新しくできた Sprite というクラスは 1 フレームしかないぶん MovieClip より軽いので、AS3 での開発では頻繁に使いそう。上条さんのブログ読んでもいまいちピンとこなかったことが、話を聴くことでかなり理解が進んだ。以下は自分用のメモ(上条氏のブログからの引用している部分もあり)。
<4/15 13:09追記>
AS3の内部的なキモである「traits」について一応自分なりに理解したことを追記してみた。けど、間違っている気もする。上条さんが書いてくれないかなぁ。
◆AS3概要紹介
講演:Adobe 上条晃宏氏
http://weblogs.macromedia.com/akamijo/
○AS3 の仕様は変更続きであったが、最近ようやく固まってきた。
○Adobe Labs のコンテンツも、更新が頻繁な上に正確に訳せているかの検証が難しかったため、日本語化は見送られた。
→代わりに、上条氏がブログで紹介することになったそう……。(;´Д`)
○現在 AS3 のアプリケーションを作れるのは Flex Builder 2 のみ。
○Flash の AS3 プレビューは Flex2 のリリース頃公開予定
※ Flash の Product Manager である Mike Downey のブログがソース。
http://weblogs.macromedia.com/md/
○Flash 8(AS1/2)アセット(swf)使用法
・AS3 のアプリケーションに埋め込む(AS1/2 で記述されたスクリプトは全て削除される)
・AS3 の Loader コンポーネントを使って読み込む(AS1/2 のコードも実行される)
○AS3 の SWF と AS1/2 の SWF 間ではクロススクリプティングができない。
※相互のやり取りはローカルコネクションを使用。
○AS3 コンパイラ/実行環境の再開発
静的言語( C++ や Java 等)と動的言語( Perl や Python 等)、双方の良さを取り入れられるよう、バランスを取ることを目指している。
○AS3 は動的言語なので、実行時につじつまが合えば型の指定は省いても構わない。
○デバッグプレーヤのみでランタイムエラーが表示される。
→今までのようにどこかで静かに処理が失敗しているという状況からはようやく開放される。
○引数のデフォルト値を設定可能。
function sampFunc(x:int, y:int, z:int = 1) { // 呼び出し時に指定がなければ z の値は 1 になる }
○this とクロージャ
AS3 では this が常に所属するインスタンスを指すための仕組みを提供。
→Delegate がいらなくなり、Java エンジニアにとって馴染みやすくなる。
○Sprite クラス
1 フレームしかない MovieClip。new Sprite(); とか書ける。
○traits
ActionScript のオブジェクトは Prototype という隠しプロパティを持っている。これはプロトタイプ指向の継承を実現するためにあり、hash みたいなオブジェクトとメッセージの移譲連鎖がある。
AS1/2 では Prototype プロパティをクラスオブジェクト(関数ポインタテーブル)のように使う。しかし AS3 でメソッドを定義するには traits という別の仕組みを使う。
○E4X (ECMAScript for XML)
ECMAScript3 の拡張として開発された XML データを扱うための仕様。AS3 では新しく E4X のクラスがサポートされ、従来よりもずっと簡単に XML データを扱うことができるようになる。XML データの階層構造をたどって目的の要素にアクセスするのに . オペレータを使用できたり、@と変数を組み合わせて属性値を得ることができる。他にも機能盛りだくさん。便利。すぐ使いたい。
var myOrder:XML = <order> <book id="1"> <title>learning AS3</title> </book> </order>; trace(myOrder.book.title); // learning AS3 が出力される trace(myOrder.book.@id); // 1 が出力される
○AVM+
・AS3 専用の Virtual Machine。AS1/2 と互換性なし。
・AS1/2 のために AVM classic が用意されているため、どちらも実行可能。
・インタープリター + JIT コンパイラを使用。超高速。メモリ少なめ。2-PASS。
→ AJAX との比較デモも見せてもらったが恐ろしく早かった……。
※ JIT コンパイラ (Just-In-Time Compiler)
プログラムのロード時や実行時に、ネイティブなマシンコードにコンパイルしてから実行すること。
Java プログラムの実行速度を上げるためなどに使われている。
○フォーカスの管理も超早くなる。Tab移動上等!
自作クラス公開・共有環境
講演:馬場鑑平氏ほか
○ソースコード管理 WEB サービスとして「trac」を使用
http://trac.dynalogue.com/flashoop/
○クラスのドキュメントはAS2Docで自動作成
http://www.as2doc.com/
○Subversionによるバージョン管理
「TortoiseSVN」というエクスプローラーを拡張するものを利用。
http://tortoisesvn.tigris.org/
○ライセンスをどうするかは検討中。
……なんかいろいろ漏れてそうだけど、とりあえずこんなところかな。