| Adobe AIR |
|
|
JavaScript 開発者のための ActionScript の基礎ActionScript™ 3.0 は JavaScript に似たプログラミング言語です。どちらも ECMAScript に基づいています。Adobe® Flash® Player 9 でリリースされた ActionScript 3.0 を使用すると、Adobe® Flash® CS3 Professional と Adobe® Flex™ 3 の両方でリッチインターネットアプリケーションを開発できます。 現行バージョンの ActionScript 3.0 は、ブラウザの Flash Player 9 用 SWF コンテンツの開発時にのみ使用できました。今回、Adobe® AIR™ で実行する SWF コンテンツの開発時にも使用できるようになりました。 『Adobe AIR Language Reference for HTML Developers』には、HTML ベースのアプリケーションの JavaScript コードで役立つクラスの情報が含まれています。これは、ランタイムのクラスセット全体のサブセットです。ランタイムの他のクラス(ビジュアルコンテンツの構造を定義する DisplayObject クラスなど)は、SWF ベースのアプリケーションの開発に役立ちます。これらのクラスを JavaScript で使用する際は、次に示す ActionScript マニュアルを参照してください。
ActionScript と JavaScript の相違点についてActionScript は、JavaScript と同じ ECMAScript 言語仕様に基づいています。したがって、両言語の基本的シンタックスは共通しています。例えば、次のコードは JavaScript でも ActionScript でも同様に機能します。 var str1 = "hello";
var str2 = " world.";
var str = reverseString(str1 + str2);
function reverseString(s) {
var newString = "";
var i;
for (i = s.length - 1; i >= 0; i--) {
newString += s.charAt(i);
}
return newString;
}
しかし、これら 2 つの言語のシンタックスと機能には相違点もあります。例えば、前述のコード例は ActionScript 3.0(SWF ファイル)で次のように記述することもできます。 function reverseString(s:String):String {
var newString:String = "";
for (var i:int = s.length - 1; i >= 0; i--) {
newString += s.charAt(i);
}
return newString;
}
Adobe AIR の HTML コンテンツでサポートされる JavaScript のバージョンは JavaScript 1.7 です。このトピックでは、JavaScript 1.7 と ActionScript 3.0 の違いについて説明します。 ランタイムには、高度な機能を提供するビルトインクラスがあります。HTML ページの JavaScript から、実行時にこれらのクラスにアクセスできます。これらのランタイムクラスは、ActionScript(SWF ファイル)と JavaScript(ブラウザで実行される HTML ファイル)の両方で使用できます。ただし、現在、これらのクラスの API ドキュメント(『Adobe AIR Language Reference for HTML Developers』には含まれていません)では、ActionScript のシンタックスを使用して説明されています。したがって、ランタイムの一部の高度な機能については、『Adobe AIR ActionScript 3.0 Language Reference』を参照してください。ActionScript に関する基礎知識は、JavaScript におけるこれらのランタイムクラスの使用方法を理解するのに役立ちます。 例として、MP3 ファイルのサウンドを再生する JavaScript コードを次に示します。 var file = air.File.usersDirectory.resolve("My Music/test.mp3");
var sound = air.Sound(file);
sound.play();
これらの各コード行では、JavaScript のランタイム機能が呼び出されます。 SWF ファイルでは、次に示す ActionScript コードでこれらのランタイム機能にアクセスできます。 var file:File = File.usersDirectory.resolve("My Music/test.mp3");
var sound = new Sound(file);
sound.play();
ActionScript 3.0 のデータ型ActionScript 3.0 は、厳密な型指定を行う言語です。つまり、1 つの変数に 1 つのデータ型を割り当てることができます。例えば、前述の例の第 1 行は次のように記述することもできます。 var str1:String = "hello"; ここでは、str1 変数が String 型として宣言されています。後続のすべての str1 変数には、ストリング値が割り当てられます。 変数、関数のパラメータ、関数の戻り値の型に対して、型を割り当てることができます。したがって、前述の例における関数の宣言を ActionScript で記述すると次のようになります。 function reverseString(s:String):String {
var newString:String = "";
for (var i:int = s.length - 1; i >= 0; i--) {
newString += s.charAt(i);
}
return newString;
}
注意: 関数の s パラメータと戻り値の両方に、String 型が割り当てられます。
ActionScript では型指定を省略できますが、次のようにオブジェクトの型を宣言することによる利点もあります。
カスタムクラスに対応するデータ型ActionScript 3.0 オブジェクトには、String、Number、Date などの最上位クラスに対応するデータ型を指定できます。 ActionScript 3.0 では、カスタムクラスを定義できます。各カスタムクラスでもデータ型を定義します。したがって、そのクラスによって定義されたアノテーション型が、ActionScript 変数、関数パラメータまたは関数の戻り値に付与される場合があります。詳しくは、ActionScript 3.0 のカスタムクラスを参照してください。 ActionScript 3.0 のクラス、パッケージおよび名前空間ActionScript 3.0 には、JavaScript 1.7 に存在しないクラスに関する機能が含まれています。 ランタイムクラスArray、Date、Math、String など、ランタイムに組み込まれているクラスの多くは、標準の JavaScript にも含まれています。しかし、標準の JavaScript には含まれず、ランタイムだけに含まれているクラスも存在します。これらのクラスには、リッチメディア(サウンドなど)の再生からソケットの操作まで、幅広い用途があります。 ほとんどのランタイムクラスは、flash パッケージ内か、flash パッケージに含まれているいずれかのパッケージ内にあります。パッケージは、ActionScript 3.0 クラスを編成する手法です(ActionScript 3.0 のパッケージを参照)。 ActionScript 3.0 のカスタムクラスActionScript 3.0 では、開発者が独自のカスタムクラスを作成できます。例えば、次のコードでは ExampleClass というカスタムクラスを定義しています。 public class ExampleClass {
public var x:Number;
public function ExampleClass(input:Number):void {
x = input;
}
public function greet():void {
trace("The value of x is: ", x);
}
}
このクラスのメンバは次のとおりです。
ActionScript 3.0 のパッケージパッケージは、ActionScript 3.0 クラスを整理する手段を提供します。例えば、AIR アプリケーションがインストールされているコンピュータ上のファイルやディレクトリの操作に関連する多くのクラスは、flash.filesystem パッケージに含まれています。この場合、flash というパッケージの中に、filesystem という別のパッケージが含まれています。さらに、そのパッケージに他のクラスやパッケージが含まれていることもあります。実際、この flash.filesystem パッケージには File、FileMode、FileStream の各クラスが含まれています。ActionScript で File クラスを参照するには、次のように記述します。 flash.filesystem.File ビルトインクラスとカスタムクラスのどちらもパッケージに編成できます。 JavaScript から ActionScript パッケージを参照するには、特殊な runtime オブジェクトを使用します。例えば、次のコードでは、JavaScript で ActionScript の新しい File オブジェクトをインスタンス化します。 var myFile = new air.flash.filesystem.File(); このコードの File() メソッドは、同じ名前(File)のクラスに対応するコンストラクタ関数です。 ActionScript 3.0 の名前空間ActionScript 3.0 では、名前空間を使用して、アクセス可能なクラス内のプロパティと関数のスコープを定義します。 public 名前空間にあるプロパティとメソッドだけを、JavaScript で使用できます。 例えば、(flash.filesystem パッケージ内の)File クラスに含まれるパブリックプロパティとメソッドには、userDirectory や resolve() などがあります。どちらも、File オブジェクトを(runtime.flash.filesystem.File() コンストラクタメソッド経由で)インスタンス化する JavaScript 変数のプロパティとして使用できます。 定義済みの名前空間には、次の 4 つがあります。
また、カスタムクラスでは JavaScript コードで使用できないその他の名前空間を使用できます。 ActionScript 3.0 関数の必須パラメータとデフォルト値ActionScript 3.0 でも JavaScript でも、関数にパラメータを含めることができます。ActionScript 3.0 のパラメータは、必須の場合とオプションの場合があります。これに対して、JavaScript のパラメータは常にオプションです。 次の ActionScript 3.0 コードで定義される関数では、n が必須パラメータです。 function cube(n:Number):Number {
return n*n*n;
}
次の ActionScript 3.0 コードで定義される関数では、n が必須パラメータ、p がオプションのパラメータで、デフォルト値は 1 です。 function root(n:Number, p:Number = 1):Number {
return Math.pow(n, 1/p);
}
ActionScript 3.0 関数では、任意の数の引数を受け取ることもできます。その場合、次に示すように、パラメータのリストの末尾に ...rest シンタックスで記述します。 function average(... args) : Number{
var sum:Number = 0;
for (var i:int = 0; i < args.length; i++) {
sum += args[i];
}
return (sum / args.length);
}
ActionScript 3.0 イベントリスナーActionScript 3.0 のプログラミングでは、すべてのイベントをイベントリスナーで処理します。イベントリスナーは関数です。オブジェクトからイベントが送出されると、イベントリスナーがイベントに応答します。ActionScript オブジェクトの一種であるイベントは、関数のパラメータとしてイベントリスナーに渡されます。これは、JavaScript で使用される DOM イベントモデルとは異なります。 例えば、Sound オブジェクトの load() メソッドを(MP3 ファイルを読み込むために)呼び出すと、Sound オブジェクトではサウンドの読み込みを試みた後、次に示すイベントのいずれかの送出を試みます。
イベントを送出できるクラスは、EventDispatcher クラスを拡張するか、IEventDispatcher インターフェイスを実装します(ActionScript 3.0 インターフェイスは、クラスで実装できる各種メソッドを定義するために使用されるデータ型です)。『ActionScript リファレンスガイド』のこれらのクラスの項目には、各クラスで送出可能なイベントの一覧が記載されています。 これらのイベントを処理するイベントリスナー関数を登録するには、イベントを送出するオブジェクトの addEventListener() メソッドを使用します。例えば Sound オブジェクトの場合、次の ActionScript コードに示すように、progress イベントと complete イベントを登録できます。 var sound:Sound = new Sound();
var urlReq:URLRequest = new URLRequest("test.mp3");
sound.load(urlReq);
sound.addEventListener(ProgressEvent.PROGRESS, progressHandler);
sound.addEventListener(Event.COMPLETE, completeHandler);
function progressHandler(progressEvent):void {
trace("Progress " + progressEvent.bytesTotal + " bytes out of " + progressEvent.bytesTotal);
}
function completeHandler(completeEvent):void {
trace("Sound loaded.");
}
次のコードに示すように、AIR で実行する HTML コンテンツで、JavaScript 関数をイベントリスナーとして登録できます(ここでは、HTML ドキュメントに progressTextArea という TextArea オブジェクトが含まれていると仮定しています)。 var sound = new runtime.flash.media.Sound();
var urlReq = new runtime.flash.net.URLRequest("test.mp3");
sound.load(urlReq);
sound.addEventListener(runtime.flash.events.ProgressEvent.PROGRESS, progressHandler);
sound.addEventListener(runtime.flash.events.Event.COMPLETE, completeHandler);
function progressHandler(progressEvent) {
document.progressTextArea.value += "Progress " + progressEvent.bytesTotal + " bytes out of " + progressEvent.bytesTotal;
}
function completeHandler(completeEvent) {
document.progressTextArea.value += "Sound loaded.";
|