関数の引数の個数の検証
この例では、カスタム関数が受け取っている入出力引数の個数が有効であるかどうかをチェックする方法を示します。MATLAB® では一部の引数のチェックが自動的に行われます。それ以外の場合は narginchk
または nargoutchk
を使用することができます。
自動引数チェック
関数定義から引数の数を判定できる場合、MATLAB ではその関数が予想されるより多くの引数を受け取るかどうかをチェックします。たとえば、次の関数は最大で 2 つの出力と 3 つの入力を扱います。
function [x,y] = myFunction(a,b,c)
myFunction
に渡した入力の数が多すぎると、MATLAB によりエラーが出されます。このケースをチェックするために narginchk
を呼び出す必要はありません。
[X,Y] = myFunction(1,2,3,4)
Error using myFunction Too many input arguments.
関数の引数の数が以下の条件を満たしているかどうかを確認するには、関数 narginchk
および関数 nargoutchk
を使用します。
最小限必要な数の引数を受け取っている
関数で
varargin
またはvarargout
が使用される場合、引数の数が最大限を超えていない
narginchk での入力チェック
testValues.m
というファイルに、少なくとも 2 つの入力を必要とする関数を作成します。最初の入力は、しきい値として他の入力との比較に使用されます。
function testValues(threshold,varargin) minInputs = 2; maxInputs = Inf; narginchk(minInputs,maxInputs) for k = 1:(nargin-1) if (varargin{k} > threshold) fprintf('Test value %d exceeds %d\n',k,threshold); end end
必要数に満たない数の入力を指定して testValues
を呼び出します。
testValues(10)
Error using testValues (line 4) Not enough input arguments.
十分な数の入力を指定して testValues
を呼び出します。
testValues(10,1,11,111)
Test value 2 exceeds 10 Test value 3 exceeds 10
nargoutchk での出力チェック
mysize.m
というファイルに関数を定義し、入力配列の次元 (関数 size
から) ベクトルとして返し、さらにオプションで各次元のサイズに対応するスカラー値を返すようにします。nargoutchk
を使用して、要求された個々のサイズの数が、使用できる次元の数を超えていないかどうかを確認します。
function [sizeVector,varargout] = mysize(x) minOutputs = 0; maxOutputs = ndims(x) + 1; nargoutchk(minOutputs,maxOutputs) sizeVector = size(x); varargout = cell(1,nargout-1); for k = 1:length(varargout) varargout{k} = sizeVector(k); end
有効な数の出力を指定して mysize
を呼び出します。
A = rand(3,4,2); [fullsize,nrows,ncols,npages] = mysize(A)
fullsize = 3 4 2 nrows = 3 ncols = 4 npages = 2
最大数を超える数の出力を指定して mysize
を呼び出します。
A = 1; [fullsize,nrows,ncols,npages] = mysize(A)
Error using mysize (line 4) Too many output arguments.