クラスのメソッドおよび関数の定義
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
ファイルのローカル関数は、そのファイル内のみで使用するユーティリティ関数として役立ちます。これらの関数は、クラスのインスタンスである引数を受け取ったり、返したりすることができますが、通常のメソッドの場合のように、必須ではありません。たとえば、以下のコードは、myUtilityFcn
を classdef
ブロックの外側で定義します。
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 アクセス メソッド
別のファイルにメソッドを定義する方法の詳細については、別ファイルのメソッドを参照してください。