Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

arguments

関数の引数の検証を宣言

構文

arguments
    argName1 (dimensions) dataType {validators} = defaultValue
    ...
    argNameN ...
end

arguments (Repeating)
    ... 
end

説明

arguments ... end は、関数の入力引数を宣言します。arguments ブロックはオプションです。arguments ブロックを含める場合は、関数の最初の実行可能行の前になければなりません。関数には複数の arguments ブロックを含めることができます。

各引数には、次の構文に示すように 1 つ以上の制限または既定値を指定できます。

argName (dimensions) dataType {validators} = defaultValue

  • (dimensions) — 入力サイズ。(1,2)(3,5,2)(1,:) など、2 つ以上の数値のコンマ区切りリストとして指定します。コロンを使用すると、その次元で任意の長さが許可されます。(dimensions) に式を含めることはできません。

    入力の次元は、(dimensions) と完全に一致するか、(dimensions) で指定されたサイズと "互換" しなければなりません。たとえば、(1,:) は、入力が 1 行 n 列の行ベクトルでなければならないことを指定しますが、n 行 1 列の列ベクトルが互換します。この関数は、行ベクトル入力を列ベクトルに変更します。同様に、(2,3) のサイズではスカラー入力が許可されますが、入力は 2 行 3 列の行列に展開されます。詳細については、基本的な演算で互換性のある配列サイズを参照してください。

  • dataType — データ型。double などのクラス名として指定します。入力は指定された型、またはその型に変換できる型でなければなりません。たとえば、double を指定する関数は single 型の値を受け入れて、それらの値を double に変換します。

  • {validators} — 中かっこで囲まれた mustBeNumericmustBeScalar などの検証関数のコンマ区切りのリスト。検証関数は、入力引数がその条件と一致しない場合エラーになります。dataType と異なり、検証関数は入力引数を変更しません。検証関数の一覧については、引数の検証関数を参照してください。

  • defaultValue — 既定値は、指定されたサイズ、型、および検証ルールと一致しなければなりません。既定値は式にすることもできます。既定値を指定すると、引数はオプションになります。オプションの引数は、関数シグネチャと arguments ブロック内で必須の引数の後に配置しなければなりません。

名前と値の引数では、argnv.name 形式を使用します。ここで、nv は関数シグネチャの構造体名で、name は arguments ブロックの引数名です。たとえば、options という名前の構造体を使用して、名前と値の引数を受け入れる関数を定義します。

y = myFunction(x,options)

arguments ブロックで、次のように、名前と値の引数の名前をフィールドとして指定します。

arguments 
    x
    options.Name1
    options.Name2
end 

一般的な arguments ブロックの使用方法の詳細については、arguments ブロック構文を参照してください。

arguments (Repeating) ... end は、繰り返し引数を宣言します。

たとえば、繰り返し引数 XY、および style を使用して myplot という名前の関数を作成すると、myplot(x1,y1,style1,x2,y2,style2) のように、これら 3 つの引数の複数のセットが受け入れられます。MATLAB® では、その引数で渡されるすべての値を含む cell 配列が作成されます。

関数には、1 つの繰り返し引数ブロックのみ含めることができます。関数に繰り返し引数および名前と値の引数をどちらも含める場合は、名前と値の引数を独自に宣言し、繰り返し引数ブロックの後に arguments ブロックを分けます。

繰り返し引数の詳細については、繰り返し引数を参照してください。

すべて折りたたむ

入力引数のサイズを、任意の長さの行ベクトルに制限する関数を記述します。検証関数を使用して、そのベクトルの要素を数値に制限します。

function [m,s] = twoStats(x)
    arguments
        x (1,:) {mustBeNumeric}
    end
    m = mean(x,"all");
    s = std(x,1,"all");
end

関数を 3 つの要素の行ベクトルで呼び出します。

a = [1 3 5];
[m,s] = twoStats(a)
m =

     3


s =

    1.6330

行ベクトルと列ベクトルは互換するため、列ベクトルを指定して関数を呼び出すこともできます。

a = [1 3 5]';
[m,s] = twoStats(a)
m =

     3


s =

    1.6330

非数値を含むベクトルを指定して関数を呼び出すと、検証関数 mustBeNumeric はエラーをスローします。

a = ["1" "3" "5"];
[m,s] = twoStats(a)
Error using twoStats
Invalid argument at position 1. Value must be numeric.

関数のオプションの名前と値の引数を宣言するには、関数宣言に構造体名を含めて、引数名を arguments ブロックのその構造体のフィールドとして定義します。

構造体名として options をもつ関数 myRectangle を宣言します。optionsLineStyle および LineWidth の 2 つのフィールドは、関数の名前と値の引数の名前です。

function myRectangle(X,Y,options)
    arguments
       X double
       Y double
       options.LineStyle (1,1) string = "-" 
       options.LineWidth (1,1) {mustBeNumeric} = 1
    end
    % Function code
    ...
end

どちらの引数名にも既定値が定義されているため、両方ともオプションです。以下の構文はすべて、関数を呼び出す有効な方法です。

myRectangle(4,5)
myRectangle(4,5,"LineStyle",":","LineWidth",2)
myRectangle(4,5,"LineWidth",2,"LineStyle",":")
myRectangle(4,5,"LineStyle",":")
myRectangle(4,5,"LineWidth",2)

繰り返し引数は、関数呼び出しで 0 回以上繰り返すことのできる単一の引数または引数のグループです。関数 fRepeat は、引数 xy、および style の繰り返しグループを受け入れます。入力引数 x および y を double 値のベクトルまたは double に変換可能な値に制限します。style を string "--"":" に制限します。

function fRepeat(x,y,style)
    arguments (Repeating)
        x (1,:) double
        y (1,:) double
        style {mustBeMember(style,["--",":"])}       
    end
    
    % Reshape the cell arrays of inputs and call plot function
    z = reshape([x;y;style],1,[]);
    if ~isempty(z)
        plot(z{:});
    end
end

2 つの入力グループを指定して fRepeat を呼び出します。MATLAB では、x で渡されるすべての値を含む cell 配列、y の値の別の配列、および style の値の 3 つ目の配列が作成されます。これらの配列は 1 行 6 列の cell 配列 z に変更されて、plot に渡されます。

x1 = 1:10;
y1 = 1:10; 
s1 = ":"; 
x2 = 1:7;
y2 = 1:1.5:10;
s2 = "--";
fRepeat(x1,y1,s1,x2,y2,s2)

Plot showing two lines

制限

  • 引数ブロックは入れ子関数、抽象メソッド、またはハンドル クラスのデストラクター メソッドではサポートされません。

詳細

すべて折りたたむ

サポートされているデータ型

引数の宣言では、Java クラス、COM クラス、および MATLAB ソフトウェア Version 7.6 より前に定義された MATLAB クラス (classdef キーワードを使用しないクラス定義) を除く、任意の MATLAB クラス、または MATLAB でサポートされている外部定義クラスを指定できます。

ヒント

  • データ型制限を使用すると、入力引数の暗黙の変換が行われます。以下に例を示します。

    function y = myFunction(inputArg1)
        arguments
            inputArg1 (1,1) double
        end
        ...
    この関数では、string "123" を入力引数として渡すと、MATLAB で string が double 型の数値 123 に変換されます。

    検証関数では入力値は変更されないため、データ型の変換を回避するには、入力を制限するデータ型ではなく、1 つ以上の検証関数を使用します。以下に例を示します。

    • string から数値への変換を回避するには、mustBeAmustBeFloat、または mustBeNumeric を使用します。

    • 数値から string への変換を回避するには、mustBeTextmustBeTextScalar、または mustBeNonZeroLengthText を使用します。

    • サイズ変換を回避するには、mustBeVector または mustBeScalarOrEmpty を使用します。

R2019b で導入