#author("2020-10-13T16:47:34+09:00","default:Miyashita","Miyashita") #author("2020-10-13T16:48:50+09:00","default:Miyashita","Miyashita") *class定義などなど メモ [#a2a71cf6] #contents **クラス定義 基本形 [#h00e20a6] 通常のファイル同様 .m ファイル形式でOK. #codeprettify(lang-matlab){{ classdef ClassName properties foobar hogehoge end properties (Constant) g = 9.81 c = 299792458 end %% methods methods %% constructor function obj = ClassName(val) obj.foobar = val end function varargout = disphoge(obj,arg2,arg3) disp(obj.hogehoge) disp(arg2+arg3) end end %% static methods methods (Static) function out = something(arg1,arg2) out = arg1 + arg2 end end end }} obj はこのクラスによって生成されたオブジェクト(インスタンス)のことを指す. **コンストラクタ [#a8ae69cd] クラス名と同名の function を作成することはできない.~ ただしコンストラクタとして,以下のようにインスタンス生成時に実行されるメソッドとして定義することはできる. #codeprettify(lang-matlab){{ function obj = ClassName(val) obj.foobar = val end }} **インスタンス生成 [#e07a2ba1] 直下にあるかパスが通っている状態で #codeprettify(lang-matlab){{ A = ClassName; % インスタンス生成 A.foobar = hogehoge; % プロパティ値入力 }} 他の言語でよくあるような()は付けない.~ プロパティを入力する手間を省く場合は,上述のコンストラクタを使用して #codeprettify(lang-matlab){{ A = ClassName(val) }} とする. **メソッド呼び出し [#ufdc4762] 上記の disphoge(obj,arg2,arg3) を使うときは, #codeprettify(lang-matlab){{ A.disphoge(arg2,arg3) }} または #codeprettify(lang-matlab){{ disphoge(A,arg2,arg3) }} のようにする.個人的には前者を推奨する. ***varargin はどうなる? [#z5bc3b9e] varargin は,通常の function と同じように使えるが, #codeprettify(lang-matlab){{ A.myfunction(arg2,arg3) }} とすると, varargin{1} は A,varargin{2} は arg2 となる. #codeprettify(lang-matlab){{ myfunction(A,arg2,arg3) }} と同じ扱いになる. #codeprettify(lang-matlab){{ % クラス定義のファイル内で書く methods function myfunction(varargin) % assign obj = varargin{1} arg2 = varargin{2} arg3 = varargin{3} % main .... ... end end }} #codeprettify(lang-matlab){{ % 実行 A = ClassName; A.myfunction(arg2,arg3) }} ***参考 - MathWorks公式 [#k299f97d] **参考[#k299f97d] MathWorks の公式ページ. -[[クラス定義>https://jp.mathworks.com/help/matlab/object-oriented-programming-in-matlab.html]]