next up previous contents
Next: 11.9 ディポーザDispose Up: 11. メソッドと秘伝 Previous: 11.7 クラスメソッド

  
11.8 クリエータNew

クリエータ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 ()


next up previous contents
Next: 11.9 ディポーザDispose Up: 11. メソッドと秘伝 Previous: 11.7 クラスメソッド
Tetsuo Ono
1998-11-05