ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

コマンドと関数の構文

コマンドと関数の構文

MATLAB® では、以下のステートメントは等価です。

load durer.mat        % Command syntax
load('durer.mat')     % Function syntax

この等価性は、"コマンドと関数の二重性" と呼ばれることがあります。

すべての関数で、次の標準 "関数構文" がサポートされています。

[output1, ..., outputM] = functionName(input1, ..., inputN)

関数からの出力を一切必要とせず、すべての入力がリテラル文字列 (つまり、単一引用符で囲まれたテキスト) である場合、次に示す単純な "コマンド構文" を使用できます。

functionName input1 ... inputN

コマンド構文ではコンマではなくスペースで入力を区切ります。また、入力引数をかっこで囲むことはありません。すべての入力がリテラル文字列であるため、入力文字列にスペースが含まれていない限り、単一引用符の使用は任意です。以下に例を示します。

disp 'hello world'

関数入力が変数であるときは、関数構文を使用してその値を関数に渡さなければなりません。コマンド構文では常に入力をリテラル テキストとして渡します。変数の値として渡すことはできません。たとえば、変数を作成して関数構文で関数 disp を呼び出し、変数の値を渡します。

A = 123;
disp(A)

このコードでは、次の予期される結果が返されます。

123

コマンド構文を使用して A の値を渡すことができないのは、次の理由によります。

disp A

は、以下と等価です。

disp('A')

これにより以下が返されます。

A

一般的な構文の誤りの回避

ワークスペースに以下の変数が含まれていると仮定します。

filename = 'accounts.txt';
A = int8(1:8);
B = A;

次の表では、コマンド構文の一般的な誤用を説明します。

以下のコマンドは...以下と等価値を渡すための正しい構文
open filenameopen('filename')open(filename)
isequal A Bisequal('A','B')isequal(A,B)
strcmp class(A) int8strcmp('class(A)','int8')strcmp(class(A),'int8')
cd matlabrootcd('matlabroot')cd(matlabroot)
isnumeric 500isnumeric('500')isnumeric(500)
round 3.499round('3.499') 次と同様
round([51 46 52 57 57])
round(3.499)

変数名の引き渡し

saveloadclearwhos などの一部の関数では、変数名にリテラル文字列が求められます。以下に例を示します。

whos -file durer.mat X

ここでは、例ファイル durer.mat の変数 X に関する情報が要求されます。このコマンドは以下の式と等価です。

whos('-file','durer.mat','X')

MATLAB によるコマンド構文の認識方法

あいまいと見なされる可能性のある次のステートメントについて考察します。

ls ./d

これは、フォルダー ./d を引数とした関数 ls の呼び出しの可能性があります。また、変数 d を除数として使用し、配列 ls の要素ごとの除算を要求している可能性もあります。

このようなステートメントをコマンド ラインに記述した場合、MATLAB では現在のワークスペースとパスにアクセスして、lsd が関数と変数のどちらであるかを判断します。ただし、コード アナライザーやエディター/デバッガーのような一部のコンポーネントは、パスやワークスペースを参照せずに動作します。このような場合、MATLAB では構文ルールを使用して、式がコマンド構文を使用した関数呼び出しであるかどうかを判断します。

一般に、MATLAB で関数または変数を指定する識別子が認識されると、式の種類を判別するためにその識別子に続く文字が以下のように解析されます。

  • 等号 (=) がある場合は代入と考えられます。以下に例を示します。

    ls =d
  • 識別子の後に左かっこがある場合は、関数呼び出しと考えられます。以下に例を示します。

    ls('./d')
  • 識別子の後にスペースがあり、演算子の可能性がある要素の後にはスペースがない場合は、コマンド構文を使用した関数呼び出しと考えられます。以下に例を示します。

    ls ./d
  • 演算子の可能性がある要素の前後にスペースがあるか、またはどちら側にもスペースがない場合は、変数を用いた演算であると考えられます。たとえば、次の 2 つのステートメントは等価です。

    ls ./ d
    
    ls./d

したがって、あいまいと見なされる可能性のある ls ./d というステートメントは、コマンド構文を使用した関数 ls の呼び出しであることになります。

ベスト プラクティスは、一般的な関数と競合する変数名は定義しないようにして、あいまいな記述を避けてください。

この情報は役に立ちましたか?