メソッドを定義しよう 予告どおり、ここではメソッドの定義方法について説明します。 説明といってもコンストラクタと変まりませんが、ちょっと付け加えたいと思います。 メソッドの宣言 コンストラクタとまったく同じです。 ただ、「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 - gabyou All Rights Reserved.
NOTES Software.