クリエータNewは、特殊なクラスメソッドで、インスタンスの生成と初期化を行う ものです。
クリエータの名前は、Cmmの言語仕様で`New'と決まっています。Newは文法上、一般的な予約語としては扱われません。つまり、クラス定義で ない部分では、
func New (a, b, c) {
....
}
と、関数名などに用いることができます。
New は、
という動作をします。Newは、必ず生成したインスタンスを返します。
class Example {
private a, b, c ;
methodNew(a, b, c) {
this->a = a ;
this->b = c ;
this->c = c ;
}
}
var anExample ;
anExample = Example->New(10, 20, 30) ;
Newを呼び出す時は、クラスメソッドのように、
クラス名->New(...)
と呼び出します。このとき、Newは、まず、そのインスタンスを生成して、そ れに対してNewの本体を実行します。その本体中では、このプログラム例のよ うに、thisは、生成されたインスタンス自身を示します。
また、Newは明示的に返る値を示さなくても、生成したインスタンスを返しま す。そのため、Newの中で、return式はメソッドの実行をそこで終了さ せますが、
return <式> ;
としても、その式の値が返ることはなく、全く無意味な式となります。
クラス定義中に、`New'が定義されてない場合、あるいは名前のみ定義され本 体が定義され以内場合は、自動的に
method New() { }
が定義されます。そのため、次のように、Newを定義していないクラスでも、そ のインスタンスの生成に、Newを使うことができます。
class WithoutNew {
private a, b, c ;
method get() { return [a, b, c] } ;
method set(a,b,c) { ->a = a ; ->b = b ; ->c = c ; }
}
var anInstance ;
anInstance = WithoutNew->New ()