型変換は、値が別のデータ型の値に変換されることです。型変換は、「暗黙的」または「明示的」に行うことができます。暗黙的な変換は、「強制型変換」とも呼ばれ、実行時に Flash Player または Adobe AIR によって行われることがあります。例えば、値 2 が Boolean データ型の変数に割り当てられると、Flash Player および Adobe AIR は値 2 をブール値 true に変換してから、変数に割り当てます。明示的な変換は、「キャスト」とも呼ばれ、コードであるデータ型の変数を別のデータ型に属している場合と同様に処理するようにコンパイラに指示されると実行されます。プリミティブ値が使用されている場合、キャストによって実際にあるデータ型の値が別のデータ型に変換されます。オブジェクトを異なる型にキャストするには、オブジェクト名を括弧で囲み、その前に新しい型の名前を置きます。例えば、次のコードはブール値を整数にキャストします。
var myBoolean:Boolean = true; var myINT:int = int(myBoolean); trace(myINT); // 1
暗黙的な変換は、次のような状況で実行時に行われます。
ユーザー定義型の場合、変換される値が変換先のクラスまたは変換先のクラスから派生するクラスのインスタンスである場合に、暗黙的な変換は成功します。暗黙的な変換が成功しなかった場合は、エラーが発生します。例えば、次のコードには、成功する暗黙的な変換と失敗する暗黙的な変換が含まれています。
class A {}
class B extends A {}
var objA:A = new A();
var objB:B = new B();
var arr:Array = new Array();
objA = objB; // Conversion succeeds.
objB = arr; // Conversion fails.
プリミティブ型の場合、暗黙的な変換は、明示的な変換関数によって呼び出される同じ内部変換アルゴリズムを呼び出して処理されます。以降のセクションでは、プリミティブ型の変換について詳しく説明します。
strict モードでコンパイルする場合、型の不一致によるコンパイル時エラーを生成しない場合があるため、明示的な変換、つまりキャストを使用すると便利です。これは、実行時に強制的に値が適切に変換されることがわかっている場合などです。例えば、フォームから受信したデータを操作するとき、強制的にストリング値を数値に変換することができます。次のコードは、standard モードでコードは正しく実行されますが、コンパイル時エラーを生成します。
var quantityField:String = "3"; var quantity:int = quantityField; // compile time error in strict mode
strict モードを引き続き使用して、ストリングを整数に変換する場合、次のように明示的な変換を使用することができます。
var quantityField:String = "3"; var quantity:int = int(quantityField); // Explicit conversion succeeds.
任意のデータ型を int、uint および Number の 3 つの数値型のいずれかにキャストすることができます。何らかの理由で Flash Player または Adobe AIR で数値を変換できない場合、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 myUInt:uint = -3; // Assign int/Number value to uint variable trace(myUInt); // 4294967293 var myNum:Number = sampleUINT; // Assign int/uint value to Number variable trace(myNum) // 4294967293 var myInt:int = uint.MAX_VALUE + 1; // Assign Number value to uint variable trace(myInt); // 0 myInt = int.MAX_VALUE + 1; // Assign uint/Number value to int variable trace(myInt); // -2147483648
次の表に、別のデータ型から Number、int、uint データ型にキャストした結果の概要を示します。
|
データ型または値 |
Number、int、uint 型への変換結果 |
|---|---|
|
Boolean |
値が true の場合は 1、それ以外の場合は 0 |
|
日付 |
Date オブジェクトの内部表現で、1970 年 1 月 1 日午前 0 時(世界時)からのミリ秒 |
| null |
0 |
|
Object |
インスタンスが null で Number 型に変換される場合は NaN、それ以外の場合は 0 |
|
String |
Flash Player または Adobe AIR でストリングを数値に変換できる場合は数値、それ以外の場合は Number 型に変換されると NaN、int 型または uint 型に変換されると 0 |
|
undefined |
Number 型に変換される場合は NaN、int 型または uint 型に変換される場合は 0 |
数値データ型(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; // Uninitialized string is null. trace(Boolean(str1));// false var str2:String = "";// empty string trace(Boolean(str2));// false var str3:String = " "; // white space only trace(Boolean(str3));// true
Object クラスのインスタンスから Boolean 型にキャストすると、インスタンスが null の場合は false、それ以外の場合は true が返されます。
var myObj:Object;// Uninitialized object is null. trace(Boolean(myObj)); // false myObj = new Object();// instantiate trace(Boolean(myObj)); // true
Boolean 型の変数は、strict モードで任意のデータ型の値をキャストしないで Boolean 型変数に割り当てることができます。すべてのデータ型から Boolean データ型への暗黙的な強制型変換は、strict モードでも行われます。つまり、ほとんどのデータ型とは異なり、strict モードのエラーを防ぐために Boolean 型へのキャストは必要ありません。次の例では、すべて strict モードでコンパイルされ、実行時に意図したとおりに動作します。
var myObj:Object = new Object();// instantiate 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 型への変換結果 |
|---|---|
|
String |
値が null または空のストリング("")の場合は false、それ以外の場合は true |
| null | false |
|
Number、int または uint |
値が NaN または 0 の場合は false、それ以外の場合は true |
|
Object |
インスタンスが null の場合は false、それ以外の場合は true |
数値データ型から 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)); // Fri Jul 1 00:00:00 GMT-0700 2005
次の表に、別のデータ型から String データ型にキャストした結果の概要を示します。
|
データ型または値 |
String 型への変換結果 |
|---|---|
|
Array |
すべての配列エレメントで構成されるストリング |
|
Boolean |
"true" または "false" |
|
Date |
Date オブジェクトのストリング表現 |
| null | "null" |
|
Number、int または uint |
数値のストリング表現 |
|
Object |
インスタンスが null の場合は "null"、それ以外の場合は "[object Object]". |
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート