Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

メソッドと関数

methods ブロック

classdef ブロックの methods ブロック内で、MATLAB® 関数としてメソッドを定義します。コンストラクター メソッドは、クラスと同じ名前をもち、クラスの初期化されたオブジェクトを返します。インスタンス固有のプロパティ値をもつオブジェクトを作成するには、クラス コンストラクターでプロパティに値を割り当てます。end ステートメントを使用して、すべてのメソッド関数を終了します。

classdef ClassName
   properties
      PropertyName
   end
   methods
      function obj = ClassName(arg1,...)
         obj.PropertyName = arg1;
         ...
      end
      function ordinaryMethod(obj,arg1,...)
         ...
      end
   end
   methods (Static)
      function staticMethod(arg1,...)
         ...
      end
   end
end

メソッド呼び出しの構文

C++ や Java® などの言語とは異なり、MATLAB には、すべてのメソッドに渡される特別な非表示のクラス オブジェクトはありません。このため、クラスのオブジェクトを明示的にメソッドに渡さなければなりません。左端の引数がクラス オブジェクトである必要はなく、引数リストには複数のオブジェクトを含めることができます。MATLAB により、優先引数のクラスによって定義されたメソッドにディスパッチされます。詳細は、メソッドの呼び出しを参照してください。

メソッドは、呼び出されるためには MATLAB パス上になければなりません。たとえば、オブジェクトを作成した後、現在のフォルダーをメソッド ファイルが認識できないフォルダーに変更すると、そのメソッドを呼び出したときにエラーが発生します。

MATLAB コードでメソッド名を使用する場合は、必ず大文字と小文字を区別してください。

通常のメソッド

MATLAB の関数構文またはドット表記を使用して、通常のメソッドを呼び出します。たとえば、ordinaryMethod を定義するクラスがあるとします。定義クラスのオブジェクトおよび必要なすべての引数を渡します。

classdef MyClass
   methods
      function out = ordinaryMethod(obj,arg1)
      ...
      end
   end
end

クラスの obj オブジェクトと次のいずれかの構文を使用して ordinaryMethod を呼び出します。

obj = MyClass;
r = ordinaryMethod(obj,arg1);
r = obj.ordinaryMethod(arg1);

静的メソッド

静的メソッドはクラスのオブジェクトを必要としません。静的メソッドを呼び出すには、メソッドを定義するクラスを MATLAB が判別できるよう、メソッド名にクラス名の接頭辞を付けます。

classdef MyClass
   methods (Static)
      function out = staticMethod(arg1)
      ...
      end
   end
end

classname.methodname の構文を使用して staticMethod を呼び出します。

r = MyClass.staticMethod(arg1);

所属クラスのオブジェクトを必要としないメソッドについての詳細は、静的メソッドを参照してください。

プライベート メソッド

プライベート メソッドを作成するには、Access メソッドの属性を使用します。private フォルダーを使用する必要はありません。

メソッド属性のリストについては、メソッドの属性を参照してください。

メソッドの詳細な情報

メソッド

クラスに関連する関数

クラス定義 (classdef) を含むファイルでは、クラス メソッドでない関数を定義できます。classdef - end ブロック外で、クラス定義と同様のファイルでローカル関数を定義します。classdef ファイル内で定義される関数は、ローカル関数のように動作します。これらのローカル関数は、同じファイルの任意の場所から呼び出せますが、それらを定義したファイル外では見ることができません。

classdef ファイルのローカル関数は、そのファイル内のみで使用するユーティリティ関数として役立ちます。これらの関数は、クラスのインスタンスである引数を受け取ったり、返したりすることができますが、通常のメソッドの場合のように、必須ではありません。たとえば、以下のコードは、myUtilityFcnclassdef ブロックの外側で定義します。

classdef MyClass
   properties
      PropName
   end
   methods
      function obj = MyClass(arg1)
         obj.PropName = arg1;
      end 
   end 
end % End of classdef

function myUtilityFcn
   ...
end

また、パッケージ関数を作成することもできます。パッケージ関数の呼び出し時にはパッケージ名を使用する必要があります。

関数と演算子のオーバーロード方法

オーバーロードする MATLAB 関数と同じ名前でクラス メソッドを定義することにより、クラスに対しその関数をオーバーロードします。MATLAB は、そのクラスのインスタンスによって関数が呼び出されるとクラス メソッドにディスパッチします。

適切な名前でクラス メソッドを定義することによって、MATLAB の算術演算子、論理演算子、関係演算子、インデックス演算子をオーバーロードできます。

クラスに定義されている演算の一覧については、handle クラスを参照してください。handle から派生されるすべてのクラスは、これらのメソッドを継承します。

別々のファイルにメソッドを定義するルール

別々のファイルに定義したメソッドには、次のルールが適用されます。

  • 別々のファイルに定義したメソッドの属性を指定するには、classdef ファイルの methods ブロックでこのメソッドを宣言します。methods ブロックで属性値を指定します。

  • methods ブロックで宣言される構文 (使用される場合) を、メソッドの function 行に一致させます。

  • 別々のファイルは、クラス (@) フォルダー内になければなりません。

  • クラス コンストラクター メソッドは classdef ファイルで定義されていなければなりません。コンストラクターは別のファイルにすることはできません。

  • ハンドル クラス delete メソッドは classdef ファイルで定義されなければなりません。delete メソッドは別のファイルにすることはできません。

    関数名にドットを使用する関数は、以下を含めて classdef ファイルで定義されなければなりません。

    • クラスがパッケージに含まれているため、パッケージ名をクラス名の一部として使用しなければならないコンバーター メソッド

    • プロパティの set および get アクセス メソッド

別のファイルにメソッドを定義する方法の詳細については、別ファイルのメソッドを参照してください。

関連するトピック