ActionScript 3
タイプ
サーチ…
タイプキャスティング
型キャストは、 as
演算子で行われます。
var chair:Chair = furniture as Chair;
または、 Type()
値をラップします。
var chair:Chair = Chair(furniture);
キャストがas
で失敗するas
、そのキャストの結果はnull
。 Type()
でラップしてキャストに失敗すると、 TypeError
がスローされます。
関数型
関数の型はFunction
です。
function example():void { }
trace(example is Function); // true
Function
型の他の変数で参照することができます。
var ref:Function = example;
ref(); // ref.call(), ref.apply(), etc.
そして、型がFunction
であるパラメータの引数として渡すことができます:
function test(callback:Function):void {
callback();
}
test(function() {
trace('It works!');
}); // Output: It works!
クラスタイプ
クラス宣言への参照は型付きです。 Class
:
var spriteClass:Class = Sprite;
Class
をタイプした変数を使用して、そのクラスのインスタンスをインスタンス化することができます。
var sprite:Sprite = new spriteClass();
これは、 Class
の型の引数を、作成される可能性のある関数と、指定されたクラスのインスタンスに渡すのに便利です。
function create(type:Class, x:int, y:int):* {
var thing:* = new type();
thing.x = x;
thing.y = y;
return thing;
}
var sprite:Sprite = create(Sprite, 100, 100);
注釈タイプ
コンパイラに値の型を示すには、次のように注釈を付け:Type
:
var value:int = 10; // A property "value" of type "int".
関数のパラメータと戻り値の型には、注釈を付けることもできます。
// This function accepts two ints and returns an int.
function sum(a:int, b:int):int {
return a + b;
}
不一致型の値を代入しようとすると、 TypeError
が返されます。
var sprite:Sprite = 10; // 10 is not a Sprite.
チェックタイプ
is
演算子を使用して、値が特定の型かどうかを検証できます。
var sprite:Sprite = new Sprite();
trace(sprite is Sprite); // true
trace(sprite is DisplayObject); // true, Sprite inherits DisplayObject
trace(sprite is IBitmapDrawable); // true, DisplayObject implements IBitmapDrawable
trace(sprite is Number); // false
trace(sprite is Bitmap); // false, Bitmap inherits DisplayObject
// but is not inherited by Sprite.
ありますinstanceof
とほぼ同じ働き演算子(非推奨) is
、それを返すことを除いてfalse
実装されたインタフェースとINT / UINTの種類をチェックするときは 。
as
演算子は、 is
演算子と同じように使用することもできます。これは、明示的なオブジェクト型のすべての可能なプロパティのリストを与えるFlashDevelopのようなスマートIDEを使用する場合に特に便利です。例:
for (var i:int = 0; i < a.length; i++){
var d:DisplayObject = a[i] as DisplayObject;
if (!d) continue;
d.//get hints here
stage.addChild(d);
}
同じ効果を得るためにis
あなたが(sligthly不便)書きます。
for (var i:int = 0; i < a.length; i++){
if (a[i] is DisplayObject != true) continue;
var d:DisplayObject = a[i] as DisplayObject;
stage.addChild(d);
}
演算子as
コード体系を調べるとき、指定された値が指定された型に最初に変換され、その演算の結果はfalseでないかどうかチェックされるので、false / NaNの可能性のある値を使うときは注意が必要です。
if(false as Boolean) trace("This will not be executed");
if(false as Boolean != null) trace("But this will be");
以下の表は、型演算子の結果を持つ基本的な値と型を示しています。緑のセルは真、赤は偽、灰色はコンパイル/ランタイムエラーの原因となります。
型付き配列
残念ながら、ActionScript 3にはgenericsの概念がないため、型付き配列をArray<T>
として定義する方法はありません。しかし特殊なクラスVector.<T>
も同様の方法で動作しますが、ベクトルをインスタンス化する際には具象クラスへの参照を提供する必要があります 。つまり、 Vector.<T>
型の上に抽象を作成する方法はありません(拡張して新しい機能を追加するなど)。これは大きな欠点です。
より簡単に見る方法は、自動的に定義するすべてのクラスにVector.<NameOfYourClass>
という名前のコンパニオンクラスがあるかのようになります。
このことから、従来のアレイよりVector.<T>
型には大きな利点がありVector.<T>
-
Vector.<T>
vs配列1で作業するとパフォーマンスが向上します。 - 非T値をコレクションに挿入しようとすると、コンパイル・タイプの
TypeError
返されます。 - IDEは、
Vector.<T>
インスタンス内のオブジェクトに対して有用な型ヒント情報を提供します。
Vector.<T>
を作成する例Vector.<T>
:
var strings:Vector.<String> = new Vector.<String>(); // or
var numbers:Vector.<Number> = new <Number>[];
1つのベクトルは、プリミティブ型( String
、 int
、 uint
、 Number
など)を扱う場合、実際には配列に比べてパフォーマンスが大幅に向上します。