知らないと損をする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属性を表示しています。
サイト内関連記事
この記事へのトラックバック
TrackBack URL:
http://www.be-interactive.org/trackback.php?id=168

コメントはありません。