オブジェクトは、クラスによって異なる初期状態をとりますが、ここでは、共通して行われる初期化動作について説明します。
生成するオブジェクトのクラスによって、デフォルトプロパティ(多くの場合Valueプロパティ)の型を指定する事ができますが、指定した型が、クラスによって認められている型か確認が行われ、もし、認められない場合例外が発生して、オブジェクトの生成は中断されます。
生成するオブジェクトがオブジェクトツリーに接続される場合、既に同名のオブジェクトが同じ階層位置に接続されていると、そのオブジェクトは新しいオブジェクトの生成前に切り離されます。関数はオブジェクトではありませんが、同名の関数に対しても削除は行われます。
オブジェクトの生成前に接続の可否について検討されます。接続するオブジェクトの性質によっては、接続が拒否される事があります。例えば、FlexViewクラスのオブジェクトに接続を許されていないLabelオブジェクトを接続すると、例外が発生します。ただし、ここで行われる確認は静的なもので、クラスや配列の可否などの確認のみです。
オブジェクトの生成が行われると、すべてのプロパティは、デフォルト値に設定されます。デフォルト値が未定義な場合、プロパティの型に応じた初期値となります。
プロパティの型 |
初期値 |
---|---|
Number |
0 |
Date |
0(無効な日付) |
String |
空文字 |
Object |
null |
生成したオブジェクトについて、実際に接続可能か確認されます。この確認では、その時点のオブジェクトの状態に基づいて行われる動的なものです。例えば、FlexRecordの子オブジェクトしてFlexHeaderを接続する場合、既にFlexLabelなどセルを形成するオブジェクトが接続されていると例外が発生します。
生成するオブジェクトがオブジェクトツリーに接続される場合、ここで、実際にツリーに接続されます。
生成したオブジェクトがコンストラクタ関数を持つ場合、実行されます。コンストラクタ関数の詳しい挙動については、クラスの項を参照してください。
オブジェクトが配列として生成された場合、指定された数だけ配列要素が展開されます。上記の7までに生成されたオブジェクトは、配列の構造を示す「配列定義情報」として機能するように設定されます。配列オブジェクトの詳細については、配列オブジェクトの項を参照してください。
オブジェクトの生成により、参照演算子(&=)を使った再計算式に影響を与える事があります。CRS実行エンジンは、再計算の必要性を検討し、必要であれば再計算を実行します。
以上が、オブジェクト生成の初期化動作です。
説明中にオブジェクトツリーに関する部分がありますが、オブジェクトツリーに接続されない場合には、それらの検証は実行されません。
クラス定義内にオブジェクト生成を含むような複合構造を持つクラスの場合、上記4の中で子オブジェクトが生成され、ここで説明した処理が再帰的に実行されます。
また、オブジェクト生成中に例外が発生した場合、生成過程のオブジェクトは破棄されますが、上記2で説明した切り離された同名のオブジェクトが復元されることはない点にも注意してください。