BeInteractive!

知らないと損をするActionScript3.0の新文法をまとめて紹介します。

複数の変数の出力が楽に:trace

引数に変数を複数渡すと、自動的にスペースで区切って表示をしてくれます。

var a:int = 0;
var b:String = 'hgoe';

trace(a, b); // Output: 0 hoge

要素の巡回が楽チン:for each

今まで、配列の要素を巡回するのは、次のようにするのがセオリーでした。

for (var i:Number = 0; i < list.length; ++I) {
    trace(list[i]);
}

しかし、もうこんな面倒な事は必要ありません。次のように書けば、list内の要素がひとつずつelementに代入されてループします。

for each (var element:Object in list) {
    trace(element);
}

応用トピック:flash.utils.Proxyを使う事で、カスタムクラスでもfor eachに対応させる事が出来ます。

素直に書けるようになった:デフォルト引数

次のように、引数を省略した場合のデフォルト値を簡単に指定できます。

function f(arg1:int, arg2:int = 2):void
{
    trace(arg1, arg2);
}
f(3, 4); // Output: 3 4
f(3); // Output: 3 2

もうargumentsは必要ない:...(可変引数)

traceのように、いくらでも引数を取れる関数では、次のように書く事で、指定した引数(ここではrest)に、残りの引数を配列として受け取る事が出来ます。

function output(separator:String, ...rest:Array):void
{
    trace(rest.join(separator));
}
output(':', 1, 2, 3, 4); // Output: 1:2:3:4
output('.', 'a', 'b', 'c'); // Output: a.b.c

全ての型を表す:*

「どんな型が代入されるか分からないけど型指定したい」という場合、従来ではObjectが用いられていましたが、AS3では、よりその意味を明確にするために、「*」(アスタリスク)という型指定が出来ます。

var element:* = list[0];

変更されたら困る変数に:const

一度値を設定したら実行中に変更する事は不可能、いわゆる「定数」を定義できます。

public class SelectedEvent extends Event
{
    public static const SELECTED:String = 'selected';
}

複数のループを一気に抜ける:label

遂に多重ループを一気にbreakしたりcontinueしたりする事が出来るようになりました。switch~caseでお馴染みのラベルを好きな所に書いて、breakやcontinueをする時にそれを指定すると、そのラベルに対して操作が行われます。

loop: for (var i:int = 0; i < 2; i++) {
    for (var j:int = 0; j < 3; j++) {
        if ((i == 1) && (j == 0)) {
            break loop;
        }
        trace(i, j);
    }
}
/* Output:
0 0
0 1
0 2
*/

解説:「loop」がラベルで、その中に入れ子になったループがあります。ループは最高でiが1、jが2になるまで続けられますが、iが1、jが0になった瞬間、breakによってloopラベルから脱出、つまりふたつのループを抜けてしまうのでOutputの結果になります。

プロパティの存在を簡単に確認:in

「a in b」(aはString)という風に書く事で、bの中にプロパティaが入っていればtrue, そうでなければfalseが返ります。これにより、プロパティ存在を簡単に調べる事が出来ます。

var obj:Object = {abc: 1, def: 2};
trace('abc' in obj); // Output: true
trace('ghi' in obj); // Output: false

オブジェクトが特定の型か簡単に確認:is

「a is b」(bはClass)という風に書く事で、aがb又はbのサブクラスのインスタンスであればtrue, そうでなければfalseが返ります。これにより、ある型がどうか簡単に調べる事が出来ます。

var s:Sprite = new Sprite();
trace(s is Sprite); // Output: true
trace(s is DisplayObject); // Output: true
trace(s is String); // Output: false

ちなみに、instanceofは、直接のインスタンスでないとtrueを返さないので注意です。

var s:Sprite = new Sprite();
trace(s instanceof Sprite); // Output: true
trace(s instanceof DisplayObject); // Output: false

例外なしでキャスト:as

通常、次のようにキャストしようとして型が合わないと、例外がスローされます。

var s:Sprite = Sprite(new Array());

しかし、asを使ってキャストすると、型が合わない場合は例外はスローされずに、その型のデフォルト値が返されます。

var s:Sprite = new Array() as Sprite;
trace(s); // Output: null
var n:Number = new Array() as Number;
trace(n); // Output: 0 ← Numberのデフォルト値は0

組み込み正規表現:RegExp

正規表現のパターンを、スクリプト内にそのまま記述する事が可能です。

var reg:RegExp = /[a-z]+/;
trace(reg.exec('123ABCdef!?')); // Output def

更には

trace(/[a-z]+/.exec('123ABCdef!?')); // Output def

組み込みXML:E4X

XMLをスクリプトで直接操作・記述することが可能です。

var com:XML = <company>
    <employee name="John" sex="male" />
    <employee name="Linda" sex="female" />
    <employee name="Bob" sex="male" />
    <employee name="Sany" sex="female" />
</company>;

for each (var emp:XML in com.employee.(@sex == 'female')) {
    trace(emp.@name);
}
/* Output:
Linda
Sany
*/

解説:変数com中で、属性sexがfemaleのemployee要素を抜き出し、そのemployeeのname属性を表示しています。

この記事へのトラックバック

SCRATCHBRAIN.BLOG ver.2 // Flash CS3 Apollo Flex ActionScript3.0 の話題
ActionScript3.0のおさらいをしていて、labelステートメントを見...

TrackBack URL:

http://www.be-interactive.org/trackback.php?id=168

この記事へのコメント

コメントはありません。

コメント書き込み:

カテゴリ

タグ

アーカイブ