Cairngorm 2.0 アルファも公開されました。(こちらです)
さて、Flex2 のベータ1では Player API や言語レベルでの変更が行われています。このため、アルファ版で作成したコードは一部修正の必要があるケースがあります。今回は、変更された箇所の中から今までの記事に関連する項目をお伝えします。
* (no type) の導入
新しく、どの型でもないことを示す * が使用できるようになりました。変数や関数の戻り値がどんな値でも持てることを指定する際に使います。* は型ではありませんが、他の型と同じように使えます。
private var foo:*; public function bar(arg:*):* { ... }
ところで、上記のサンプルは型指定を何もしない場合と同じ意味になります。アルファ版では型指定をしないと Object 型の指定と同様に扱われていました。
private var foo; public function bar(arg) { ... }
また、a[i] のような配列の要素も Object ではなく * として扱われます。
Object 型の変更
* の導入により Object 型はいくつかの変更を受けています。まず、未定義時の値が null になります。undefined の値を持つことができるのは * として宣言された変数のみです。
private var foo:Object; trace(foo); // null が出力される
また、Object型 は自動的に型変換されなくなり、他の型に代入する際は明示的に as を使うなどしてキャストをする必要があります。 一方、* 宣言された変数は自動的に他の型に変換されます。
private var foo:Object = new Object(); private var bar:String = foo; // エラー private var baz:* = new Object(); bar = baz; // OK
その他の型に関連する変更
void はもともとクラスではないとのことから、Void が void (全部小文字)に変更されました。とはいえ、従来どおり戻り値のない関数の型指定として使用します。
public function foo(o:Object):void { ... }
as は元の値そのままか null のどちらかを返します。値の変換は行わなくなりました。
アクセス修飾子
クラスを private 宣言することができなくなりました。また、ヘルパークラスが必要な場合は、パッケージブロック外に記述します。
package sample { import flash.events.*; public class SampleClass { ... } } class PrivateClass { ... }
イベント関連
従来、イベントの種類は専用のクラスに定義されていましたが、イベントクラスに定義が移っています。例えば、MouseEventType.MOUSE_UP は MouseEvent.MOUSE_UP になります。
EventDispatcher クラスの addEventListener() メソッドの priority プロパティの指定が逆になりました。数値の大きいほうが先に実行される(優先度が高い)ようになります。
コメントする