メソッドを定義しよう

予告どおり、ここではメソッドの定義方法について説明します。
説明といってもコンストラクタと変まりませんが、ちょっと付け加えたいと思います。

メソッドの宣言

コンストラクタとまったく同じです。
ただ、「constructor」を、関数でおなじみの「function」を使うだけの話です。
メソッドの定義
1
2
3
4
5
6
7
class CSample(){
  function Speak(Text);
}

function CSample.Speak(Text){
  Mes(Text);
}
これだけ。特に問題なしではないでしょうか?
呼び出し方もコンストラクタと同様ですが、注意しなくてはならないことがあります。
それは、メソッドはオブジェクトで使うということです。
まぁ、見ていただければわかります。
メソッドの呼び出し
1
2
3
4
5
6
7
8
9
10
class CSample(){
  function Speak(Text);
}

function CSample.Speak(Text){
  Mes(Text);
}

Obj = CSample.Create;
Obj.Speak("こんにちは!"); //メソッド呼び出し
コンストラクタは直接クラス名(CSample.)を指定していますが、
メソッドはObj、つまりオブジェクトを指定しています。


宣言部にメソッドを書く

コンストラクタを説明したときには言いませんでしたが、
宣言部内に直接メソッド等を記述することも可能です。
宣言部に直接
1
2
3
4
5
6
7
8
class CSample(){
  function Speak(Text){
    Mes(Text);
  }
}

Obj = CSample.Create;
Obj.Speak("こんにちは!"); //メソッド呼び出し
と、こんな感じです。
ソースが短いときはこんな感じでもいいでしょう。
ただし、宣言部に書いたときと実行部に書いたときでは、大きな差が現れる部分があります。
メソッド呼び出し1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CSample(){
  function Speak(Text);
  function GetName;
}

function CSample.Speak(Text){
  Name = GetName;
  Mes("{Text}\n私は{Name}です。");
}

function CSample.GetName(){
  Return "CSample";
}

Obj = CSample.Create;
Obj.Speak("こんにちは!"); //メソッド呼び出し
ちょっと複雑ですが、Speakが呼ばれたらGetNameを呼んでいるだけです。
問題ないですね?ちゃんと自己紹介的な文が出たはずです。
では宣言部に書いて実行してみましょう。
メソッド呼び出し2
1
2
3
4
5
6
7
8
9
10
11
12
13
class CSample(){
  function Speak(Text){
    Name = GetName;
    Mes("{Text}\n私は{Name}です。");
  }

  function GetName(){
    Return "CSample";
  }
}

Obj = CSample.Create;
Obj.Speak("こんにちは!"); //メソッド呼び出し
実行すると...
あれ?2行目は「私はgetnameです。」としか表示が出ません。
なぜでしょうか?

メソッドも関数同様、宣言が先でなくてはならないからです。
つまり、GetNameの宣言が、Speakよりも後のため、Speak内のGetNameは変数として扱われます。
ですから、面倒くさいかもしれませんが、宣言部と実行部は分けて書くようにしてください。
前へ / index / 次へ
プログラム言語「Spinel
Copyright © 2005 - Giemsa All Rights Reserved.
NOTES Software.