#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]]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes