Main Content

関数の引数の個数の検証

この例では、カスタム関数が受け取っている入出力引数の個数が有効であるかどうかをチェックする方法を示します。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.

参考

|

関連するトピック