#author("2020-10-14T17:22:41+09:00","default:Miyashita","Miyashita")
#author("2020-10-14T17:23:02+09:00","default:Miyashita","Miyashita")
*function 作成 [#zf35b6e4]
自作の function を作成するにあたってのメモ書き.
** function をどこに格納するか [#ra8cf421]
***クラスでまとめる [#fa58c7a5]
同族の function は,クラスに押し込んで参照する.定義の方法については [[クラス定義>../class]] に記載.~
プロパティを必要としない function であっても,
#codeprettify(lang-matlab){{
    methods (Static)
methods (Static)
}}
と定義してその中に 普通の function を入れてしまえば良い.~

#codeprettify(lang-matlab){{
classdef MyClass
    properties
        XXX
        YYY
    end

    %% 
    methods
        function obj = FuncObj(obj)
            ... XXXX ...
        end
    end

    methods (Static)
        %% Table of stations
        function argout = MyFunc(argin)
            ... XXXX ...
        end
    end
end
}}
この場合 MyClass.MyFunc(argin) のようにして function が使える.~
~
~

***ディレクトリにまとめる [#r297cf06]
function 群は何らかのディレクトリに押し込んで,一時的に addpath で追加している
#codeprettify(lang-matlab){{
addpath('./localfunc') % 一時的にパス追加,メインルーチンの最初に書く
}}
#codeprettify(lang-matlab){{
rmpath('./localfunc') % パスから除く,メインルーチンの最後に書く,必要なら実行
}}
addpath の path 追加は,一度 MATLAB を閉じると効果が消える.~
~
~


**入力引数の数を可変に - nargin, varargin[#fad8f801]
nargin を使うことによって,入力引数の個数を調整することが可能.~
引数の数による場合分けができて効率が良い.~
narginchk または if〜nargin で数の確認を行うことができる.~
例えば function の中に以下の文を挿入すると,
引数が 4 個と 5 個の場合にのみ実行され,その他はエラーメッセージが出現する.
#codeprettify(lang-matlab){{
% 簡単に
narginchk(4,5)
}}
#codeprettify(lang-matlab){{
% これでも大体同じ
if nargin < 3 || nargin > 6;
    error('Invalid number of arguments')
end
}}

varargin は便利だが,自作 function では可読性が落ちるような気がする.~
使用方法には注意が必要.

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