オブジェクトの初期状態

オブジェクトは、クラスによって異なる初期状態をとりますが、ここでは、共通して行われる初期化動作について説明します。

1 オブジェクトの生成

オブジェクトの生成が行われると、すべてのプロパティは、デフォルト値に設定されます。

2 コンストラクタ関数の呼び出し

生成したオブジェクトがコンストラクタ関数を持つ場合、実行されます。コンストラクタ関数の詳しい挙動については、クラスの項を参照してください。

3 オブジェクトツリーへの静的な接続確認

オブジェクトの生成前に接続の可否について検討されます。接続するオブジェクトの性質によっては、接続が拒否される事があります。

例えば、Spreadクラスのオブジェクトに接続を許されていないLabelオブジェクトを接続すると、例外が発生します。 ただし、ここで行われる確認は静的なもので、クラスや配列の可否などの確認のみです。

4 オブジェクトツリーへの動的な接続確認

生成したオブジェクトについて、実際に接続可能か確認されます。この確認では、その時点のオブジェクトの状態に基づいて行われる動的なものです。

例えば、FlexRecordの子オブジェクトしてFlexHeaderを接続する場合、既にFlexLabelなどセルを形成するオブジェクトが接続されていると例外が発生します。

5 同名オブジェクトの切り離し

生成するオブジェクトがオブジェクトツリーに接続される場合、既に同名のオブジェクトが同じ階層位置に接続されていると、そのオブジェクトは新しいオブジェクトの生成前に切り離されます。

関数はオブジェクトではありませんが、同名の関数に対しても削除は行われます。

6 オブジェクトツリーへの接続

生成するオブジェクトがオブジェクトツリーに接続される場合、ここで、実際にツリーに接続されます。

7 配列要素の展開

オブジェクトが配列として生成された場合、指定された数だけ配列要素が展開されます。上記の7までに生成されたオブジェクトは、配列の構造を示す「配列定義情報」として機能するように設定されます。配列オブジェクトの詳細については、配列オブジェクトの項を参照してください。

8 再計算処理

オブジェクトの生成により、参照演算子(&=)を使った再計算式に影響を与える事があります。CRS実行エンジンは、再計算の必要性を検討し、必要であれば再計算を実行します。


以上が、オブジェクト生成の初期化動作です。

説明中にオブジェクトツリーに関する部分がありますが、オブジェクトツリーに接続されない場合には、それらの検証は実行されません。

クラス定義内にオブジェクト生成を含むような複合構造を持つクラスの場合、上記4の中で子オブジェクトが生成され、ここで説明した処理が再帰的に実行されます。

また、オブジェクト生成中に例外が発生した場合、生成過程のオブジェクトは破棄されますが、上記2で説明した切り離された同名のオブジェクトが復元されることはない点にも注意してください。