メソッド定義
書式
メソッド定義は以下の形式です。
アクセス制御 method 返り値型 メソッド名(引数)
...
endmethod
アクセス制御から始まりキーワードmethodが続きキーワードendmethodで終わる定義です。
メソッド名が異なる、またはメソッド名が同じでも引数の組み合わせが異なるメソッドをクラス定義内の任意の場所で定義することが出来ます。
メソッド定義はスコープを生成します。
アクセス制御
メソッドのアクセスレベルを、キーワードopenかclosedを用いて指定します。
openを指定すると、そのゲッタはクラス定義の外部から呼び出すことができます。
closedを指定すると、そのゲッタはクラス定義の内部でのみ使えます。
method
メソッドの定義である事を示すキーワードです。アクセス制御の次に指定する必要があります。
返り値型
キーワード method の次に返り値型を指定します。これはメソッドが返すインスタンスのクラスを示しています。
メソッドが値を返さない場合はvoidを指定してください。
返り値型がvoidで無い場合はreturn文を使って値を返します。この値のクラスが返り値型と一致する必要があります。
値を返さない場合はreturn文はオプションです。
メソッド名
返り値型の次にメソッド名を指定します。メソッド名の命名規則は識別子と同じです。
例外的にメソッド名として組み込みクラスの名前を使うことが出来ます。
引数
メソッドの引数をクラス名の次に括弧で囲んで指定します。
引数はクラス名と引数名の組です。
二つ以上の引数があるときはカンマで区切って指定します。引数が一つのときはカンマは必要ありません。引数が無いときは括弧の中は空です。
引数のクラスの並び順でもメソッドを区別しているので同名の引数の並び順が異なるメソッドを定義できます。
endmethod
メソッド定義の終了を示すキーワードです。
endmethod の代わりに省略形のemを使用できます。emもキーワードであることに注意してください。
例
exampleクラスにメソッドを定義します。
1: | class example |
2: | int x; |
3: | int y; |
4: | open fitter example() // デフォルトフィッタ。 |
5: | x = 0; |
6: | y = 0; |
7: | endfitter |
8: | open fitter example(int xx, int yy) // 引数二つのフィッタ。 |
9: | x = xx; |
10: | y = yy; |
11: | ef // 省略形 |
12: | open setter X(int val) |
13: | x = val; |
14: | endsetter |
15: | open getter int X |
16: | return x; |
17: | endgetter |
18: | open setter Y(int val) |
19: | y = val; |
20: | es // 省略形 |
21: | open getter int Y |
22: | return y; |
23: | eg // 省略形 |
24: | open method void Clear() |
25: | x = 0; |
26: | y = 0; |
27: | return; // オプション、無くてもよい。 |
28: | endmethod |
29: | open method example Add(int vx, int vy) |
30: | return new example(x + vx, y + vy); |
31: | endmethod |
32: | open method example Add(example ve) // 同名、引数違い。 |
33: | return new example(x + ve.x, y + ve.y); |
34: | em // 省略形 |
35: | endclass |
メソッド呼出式を用いてメソッドを呼び出します。
1: | example ex = new example(10, 10); |
2: | ex.Clear(); |
3: | example ex2 = ex.Add(10, 10); |
3: | example ex3 = ex.Add(ex2); |