フィールド宣言
書式
クラス名
クラス名はフィールドに拘束されるクラスです。
Riceは強く型付けされた言語ですので、フィールドや変数を名前だけで宣言することはできません。クラスの種類と名前の組が必要になります。
フィールド名
フィールド名はフィールドにアクセスするために使う識別子です。命名規則は一般の識別子と同じです。
他のメンバと衝突しないユニークな名前を指定してください。名前が衝突した場合は例外が発生するか名前の隠ぺいが起こります。
セミコロン
フィールド宣言の終了はセミコロンで表します。セミコロンはRiceで使用される一般的な文の終了記号です。
特徴
Riceのフィールドには幾つかの特徴があります。
宣言はできるが定義はできません。
未知のクラスを宣言することができます。
クラス定義内だけでアクセスできます。
宣言と定義
未知のクラスの宣言
未知のクラスのフィールドを宣言できます。
後で定義されるクラスをフィールドとして先に宣言すると、システムがdummyクラスを仮置きします。dummyクラスは仮置き専用のクラスです。
未知のクラスの定義が終了しても、仮置きされたdummyクラスはそのままです。
つまり、このようなフィールドを持つクラスは不完全な状態になります。使用前にフィッタを使って完全な状態に初期化してください。
アクセス制御
フィールド以外のメンバーは、定義の先頭で適切なキーワード、openかclosed、を使うことによってアクセスレベルを制御出来ます。
openメンバーはクラス定義の外部から呼び出せます。closedメンバーは外部から呼び出せません。
フィールドのアクセスレベルはclosedで固定されています。この様なアクセス制御のための記法を持ちません。フィールドに直接アクセスできるのはクラス定義の内部だけです。
例
exampleクラスとcircularクラスを定義します。
4行目でcircularクラスがフィールドとして宣言されています。これが"未知のクラスの宣言"になります。
1: | class example |
2: | int x; |
3: | int y; |
4: | circular cirField; // 未知のクラス。dummy クラスが仮置きされます。 |
5: | open fitter example(circular cir) // フィッター。 |
6: | cirField = cir; |
7: | endfitter |
8: | endclass |
9: | |
10: | class circular |
11: | bool boolFied; |
12: | endclass |
次の様にすればexampleクラスを完全な状態に初期化できます。
1: | circular cir; |
2: | example ex = new example(cir); // cirFieldをcircularに置き換える。 |