型変換

型変換は、値が別のデータ型の値に変換されることです。型変換は、"暗黙的" または "明示的" に行うことができます。暗黙的な変換は、"強制型変換" とも呼ばれ、実行時に Flash Player によって行われることがあります。たとえば、値 2 が Boolean データ型の変数に割り当てられると、Flash Player は値 2 をブール値 true に変換してから、変数に割り当てます。明示的な変換は、"キャスト" とも呼ばれ、コードであるデータ型の変数を別のデータ型に属している場合と同様に処理するようにコンパイラに指示されると実行されます。プリミティブ値が使用されている場合、キャストによって実際にあるデータ型の値が別のデータ型に変換されます。オブジェクトを異なる型にキャストするには、オブジェクト名を括弧で囲み、その前に新しい型の名前を置きます。たとえば、次のコードはブール値を整数にキャストします。

var myBoolean:Boolean = true;
var myINT:int = int(myBoolean);
trace(myINT); // 1

サブトピック

暗黙的な変換
明示的な変換
int、uint、Number 型にキャスト
Boolean 型へのキャスト
String 型へのキャスト

暗黙的な変換

暗黙的な変換は、次のような状況で実行時に行われます。

ユーザー定義型の場合、変換される値が変換先のクラスまたは変換先のクラスから派生するクラスのインスタンスである場合に、暗黙的な変換は成功します。暗黙的な変換が成功しなかった場合は、エラーが発生します。たとえば、次のコードには、成功する暗黙的な変換と失敗する暗黙的な変換が含まれています。

class A {}
class B extends A {}

var objA:A = new A();
var objB:B = new B();
var arr:Array = new Array();

objA = objB; // 変換は成功。
objB = arr; // 変換は失敗。

プリミティブ型の場合、暗黙的な変換は、明示的な変換関数によって呼び出される同じ内部変換アルゴリズムを呼び出して処理されます。以降のセクションでは、プリミティブ型の変換について詳しく説明します。

明示的な変換

strict モードでコンパイルする場合、型の不一致によるコンパイル時エラーを生成したくない場合があるため、明示的な変換、つまりキャストを使用すると便利です。これは、実行時に強制的に値が適切に変換されることがわかっている場合などです。たとえば、フォームから受信したデータを操作するとき、強制的にストリング値を数値に変換することができます。次のコードは、standard モードでコードは正しく実行されますが、コンパイル時エラーを生成します。

var quantityField:String = "3";
var quantity:int = quantityField; // strict モードではコンパイル時にエラー

strict モードを引き続き使用して、ストリングを整数に変換する場合、次のように明示的な変換を使用することができます。

var quantityField:String = "3";
var quantity:int = int(quantityField); // 明示的な変換は成功。

int、uint、Number 型にキャスト

任意のデータ型を int、uint、および Number の 3 つの数値型のいずれかにキャストすることができます。何らかの理由で Flash Player で数値を変換できない場合、int および uint データ型ではデフォルト値 0 が割り当てられ、Number データ型ではデフォルト値 NaN が割り当てられます。ブール値を数値に変換する場合、true は値 1 になり、false は値 0 になります。

var myBoolean:Boolean = true;
var myUINT:uint = uint(myBoolean);
var myINT:int = int(myBoolean);
var myNum:Number = Number(myBoolean);
trace(myUINT, myINT, myNum); // 1 1 1
myBoolean = false;
myUINT = uint(myBoolean);
myINT = int(myBoolean);
myNum = Number(myBoolean);
trace(myUINT, myINT, myNum); // 0 0 0

数字のみを含むストリング値は、数値型のいずれかに変換することができます。数値型では、負の数のように見えるストリングまたは 16 進数値 (たとえば、0x1A) を表すストリングも変換することができます。変換プロセスでは、ストリング値の先頭および末尾の空白は無視されます。Number() を使用して浮動小数点数のように見えるストリングをキャストすることもできます。小数点が含まれていると、uint() および int() は、小数点の後の数字が切り捨てられた整数を返します。たとえば、次のストリング値は数値にキャストすることができます。

trace(uint("5"));     // 5
trace(uint("-5"));    // 4294967291. It wraps around from MAX_VALUE
trace(uint(" 27 "));  // 27
trace(uint("3.7"));   // 3
trace(int("3.7"));    // 3
trace(int("0x1A"));   // 26
trace(Number("3.7")); // 3.7

数値以外の文字を含むストリング値は、int() または uint() でキャストすると 0 を返し、Number() でキャストすると NaN を返します。変換プロセスでは、先頭および末尾の空白は無視されますが、ストリング値に 2 つの数値を区切る空白がある場合は、0 または NaN が返されます。

trace(uint("5a"));    // 0
trace(uint("ten"));   // 0
trace(uint("17 63")); // 0

ActionScript 3.0 では、Number() 関数は 8 進数をサポートしていません。ActionScript 2.0 の Number() 関数に先頭が 0 のストリングを指定した場合、数値は 8 進数として解釈され、10 進数に変換されます。これは、ActionScript 3.0 の Number() 関数には当てはまりません。この関数では、先頭の 0 は無視されます。たとえば、次のコードは、異なるバージョンの ActionScript を使用してコンパイルされると、異なる出力を生成します。

trace(Number("044")); 
// ActionScript 3.0 44
// ActionScript 2.0 36

数値型の値が別の数値型の変数に割り当てられる場合、キャストは必要ありません。strict モードでも、数値型は別の数値型に暗黙的に変換されます。これは、場合によっては、型の範囲を超えると予期しない値になることを示します。次の例では、予期しない値が生成される場合もありますが、すべて strict モードでコンパイルされます。

var sampleUINT:uint = -3; // int 型と Number 型の値を割り当てる。
trace(sampleUINT); // 4294967293

var sampleNum:Number = sampleUINT; // int 型と unit 型の値を割り当てる。
trace(sampleNum) // 4294967293

var sampleINT:int = uint.MAX_VALUE + 1; // Number 型の値を割り当てる。
trace(sampleINT); // 0

sampleINT = int.MAX_VALUE + 1; // uint 型と Number 型の値を割り当てる。
trace(sampleINT); // -2147483648

次の表に、別のデータ型から Number、int、uint データ型にキャストした結果の概要を示します。

データ型または値

Number、int、uint 型への変換結果

Boolean

値が true の場合は 1、それ以外の場合は 0

Date

Date オブジェクトの内部表現で、1970 年 1 月 1 日午前 0 時 (世界時) からのミリ秒

null

0

Object

インスタンスが null で Number 型に変換される場合は NaN、それ以外の場合は 0

ストリング

Flash Player でストリングを数値に変換できる場合は数値、それ以外の場合は Number 型に変換されると NaN、int 型または uint 型に変換されると 0

undefined

Number 型に変換される場合は NaN、int 型または uint 型に変換される場合は 0

Boolean 型へのキャスト

数値データ型 (uint、int、および Number) から Boolean 型にキャストすると、数値が 0 の場合は false、それ以外の場合は true になります。Number データ型では、値 NaN のときも false になります。次の例は、数値 -1、0、および 1 をキャストした結果を示します。

var myNum:Number;
for (myNum = -1; myNum<2; myNum++)
{
    trace("Boolean(" + myNum +") is " + Boolean(myNum));
}

この例の出力は、3 つの数値のうち 0 だけが値 false を返すことを示します。

Boolean(-1) is true
Boolean(0) is false
Boolean(1) is true

String 型から Boolean 型にキャストすると、ストリングが null または空のストリング ("") の場合は false を返します。それ以外の場合は、true を返します。

var str1:String;       // 初期化されていないストリングは null。
trace(Boolean(str1));  // false

var str2:String = "";  // 空のストリング
trace(Boolean(str2));  // false

var str3:String = " "; // 空白のみ
trace(Boolean(str3));  // true

Object クラスのインスタンスから Boolean 型にキャストすると、次の例に示すように、インスタンスが null の場合は false、それ以外の場合は true が返されます。

var myObj:Object;      // 初期化されていないオブジェクトは null。
trace(Boolean(myObj)); // false

myObj = new Object();  // インスタンス化
trace(Boolean(myObj)); // true

Boolean 型の変数は、strict モードで任意のデータ型の値をキャストしないで Boolean 型変数に割り当てることができます。すべてのデータ型から Boolean データ型への暗黙的な強制型変換は、strict モードでも行われます。つまり、ほとんどのデータ型とは異なり、strict モードのエラーを防ぐために Boolean 型へのキャストは必要ありません。次の例では、すべて strict モードでコンパイルされ、実行時に意図したとおりに動作します。

var myObj:Object = new Object();  // インスタンス化 
var bool:Boolean = myObj;
trace(bool); // true
bool = "random string";
trace(bool); // true
bool = new Array();
trace(bool); // true
bool = NaN;
trace(bool); // false

次の表に、別のデータ型から Boolean データ型にキャストした結果の概要を示します。

データ型または値

Boolean 型への変換結果

ストリング

値が null または空のストリング ("") の場合は false、それ以外の場合は true

null false

Number、int、
または uint

値が NaN または 0 の場合は false、それ以外の場合は true

Object

インスタンスが null の場合は false、それ以外の場合は true

String 型へのキャスト

数値データ型から String データ型にキャストすると、数値のストリング表現が返されます。Boolean 型から String 型にキャストすると、値が true の場合はストリング "true"、値が false の場合はストリング "false" が返されます。

Object クラスのインスタンスから String データ型にキャストすると、インスタンスが null の場合はストリング "null" が返されます。それ以外の場合は、Object クラスから String 型にキャストすると、ストリング "[object Object]" が返されます。

Array クラスのインスタンスから String 型にキャストすると、すべての配列エレメントのカンマ区切りリストから構成されるストリングが返されます。たとえば、次の String データ型へのキャストは、配列の 3 つのエレメントすべてから成るストリングを 1 つ返します。

var myArray:Array = ["primary", "secondary", "tertiary"];
trace(String(myArray)); // primary,secondary,tertiary

Date クラスのインスタンスから String 型にキャストすると、インスタンスに含まれる日付のストリング表現が返されます。たとえば、次の例は Date クラスインスタンスのストリング表現を返します。この出力は、太平洋標準時の場合の結果を示します。

var myDate:Date = new Date(2005,6,1);
trace(String(myDate)); // 2005 年 7 月 1 日金曜日 00:00:00 GMT-0700

次の表に、別のデータ型から String データ型にキャストした結果の概要を示します。

データ型または値

String 型への変換結果

Array

すべての配列エレメントで構成されるストリング

Boolean

"true" または "false"

日付

Date オブジェクトのストリング表現

null "null"

Number、int、または uint

数値のストリング表現

Object

インスタンスが null の場合は "null"、それ以外の場合は "[object Object]"。


Flex 2.01