この記事は、Javaに精通した開発者の方に、ActionScript 3.0(以下AS3)がどのような言語なのか、どこがJavaと異なっているのか(あるいは同じなのか)を一覧できるようまとめたものです。
主にAS3の静的な側面をまとめた、『文法編』(この記事)および『クラス宣言編』(Adobe Developer Connectionにて公開中)と、動的な側面をまとめた『属性操作編』(近日公開予定)および『振舞い編』(近日公開予定)の4編に分けて、Java開発者が引っかかりやすいと思われる点を中心に記述しました。
厳密な言語解説よりは、まずAS3の概要が分かること、を目的に書かれています。さらに詳しい言語仕様についてはActionScript 3.0の学習をご覧ください。
文法編の内容
文法編では、要素と宣言に関わる基本的な文法を扱います。とはいっても、JavaとAS3の文法はいろいろな面で似ています。そのため、この記事では、特に違いを意識する必要がありそうな項目に絞って説明します。
下は、JavaとAS3それぞれのクラス宣言の例です。ひとめでは、どちらのサンプルか分からない程度に似ています。
package foo; import foopack.*; public class Foo extends FooBase implements IFoo { private String str = "文字列"; public int bar(boolean b) { return 0; } }
package foo { import foopack.*; public class Foo extends FooBase implements IFoo { private var str:String = "文字列"; public function bar(b:Boolean):int { return 0; } } }
要素/文法
セミコロン(;)
Javaは文末にセミコロンが必要です。
foo = 0;
AS3 はセミコロンが必須ではありません。一行に複数の文を書く場合は、セミコロンで区切ります。
foo = 0 bar = 1; baz = 2
文法上は不要でも、可読性のため、セミコロンを付けることが推奨です。
null,undefined,NaN,
Javaでは初期化されていないオブジェクトの値はnull
です。
Object foo; Number num; System.out.println(foo); // 'null' が出力される System.out.println(num); // 'null' が出力される
AS3はオブジェクトの型により"null
","undefined
","NaN
"と値が変わります。
var foo; var bar:Object; var baz:*; var num:Number; trace(foo); // 'undefined' が出力される trace(bar); // 'null' が出力される trace(baz); // 'undefined' が出力される trace(num); // 'NaN' が出力される
型注釈の無い場合のみ、値がundefined
になります。変数の型注釈に*記号を指定すると、型注釈を使用しない場合と同じ扱いになります。その他、変数のデフォルト値については、アドビのヘルプ内のデフォルト値一覧をご覧ください。
プリミティブ型
Javaには8つのプリミティブ型があります。例えばint
はプリミティブ型です。int
をオブジェクトとして使用したい場合はラッパークラスであるInteger
を使います。
int i = 123; Integer n = new Integer(i); n.toString();
AS3ではプリミティブ型もオブジェクトです。そのため、int
型の変数に対してもメソッドを呼び出すことができます。当然、ラッパークラスは存在しません。
var i:int = 123; i.toString();
AS3のプリミティブ型に関する詳細は、アドビヘルプのデータ型のまとめをご覧ください。
キャスト
Javaのキャストは、変数の前に括弧付きで型を指定します。
float f = 5.0; int i = (int)f; // i は 5
AS3のキャストは関数呼び出しと同じ形式です。詳細はアドビヘルプ内の「型変換」の節に詳しく書かれています。
var f:Number = 5.0; var i:int = int(f); // i は 5
AS3では、データ型の検査にas
演算子を使うことができます。
var f:Number = 5.0; var i:int = f as int; // i は 5
式がデータ型に属さない場合、as
は値を変換せずnull
を返します。そのため、キャストのようにランタイムエラーが起きないという利点があります。ただし、基本データ型(Boolean
,Number
,int
,uint
)の値の変換が目的の場合には向きません。
var f:Number = 5.5; var i:int = f as int; // i は 0 trace(f as int); // null が出力される
instanceof
Javaでは、ある変数が特定の型に属しているかを知る場合instanceof
を使います。
String str; if (str instanceof Number) { ... }
AS3では、このような場合、is
演算子を使います。
var str:String; if (str is Number) { ... }