このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
プログラムファイルには複数の関数を含めることができます。ローカル関数と入れ子関数は、プログラムを小さいタスクに分割するときに便利です。これにより、コードが読み取りやすく、維持しやすくなります。
“ローカル関数”は,同じファイル内で利用できるサブルーチンです。ローカル関数を使用することが、プログラム タスクを分割する最も一般的な方法です。関数ファイルの場合は関数定義のみが含まれ、ローカル関数は、ファイル内のメイン関数の後に任意の順序で配置できます。スクリプト ファイルの場合はコマンドと関数定義が含まれ、ローカル関数はファイルの末尾に配置しなければなりません (スクリプト内の関数は、R2016b 以降でサポートされます)。
たとえば,メイン関数myfunction
と2つのローカル関数squareMe
とdoubleMe
をもつ,myfunction.m
という関数ファイルを作成します。
函数b = myfunction(a) b = squareMe(a)+doubleMe(a);结束函数y = x.^2;结束函数y = x.*2;结束
メイン関数はコマンドラインまたは別のプログラムファイルから呼び出せますが,ローカル関数はmyfunction
のみで使用できます。
myfunction(π)
ans = 16.1528
“入れ子関数”は,完全に別の関数内に含まれている関数です。入れ子関数とローカル関数の主な違いは、入れ子関数は親関数で定義された変数を、引数として明示的に受け渡すことなく使用できるということです。
入れ子関数は,コンポーネント間でデータを受け渡すアプリケーションなど,サブルーチンでデータを共有するときに便利です。たとえば,スライダーまたは編集可能なテキストボックスを使って0と1の間の値を設定できる関数を作成します。コールバックに入れ子関数を使用すると,スライダーとテキストボックスは値とそれぞれのハンドルを明示的に受け渡しせずに共有できます。
函数Myslider值= 0;f =图;s = uicontrol (f,“风格”,“滑块”,“回调”, @slider);e = uicontrol (f,“风格”,“编辑”,“回调”@edittext,...“位置”, 100年,20100年,20);函数slider(obj,~) value = obj. value;e.String = num2str(价值);结束函数edittext(obj,~) value = str2double(obj. string);s.Value =价值;结束结束
ローカル関数や入れ子関数と同様に,プライベート関数は特定の場所にある関数のみがアクセスできます。ただし,プライベート関数は,プライベート関数を呼び出せる関数と同じファイル内にはありません。私人
というサブフォルダー内にあります。プライベート関数は,私人
フォルダーのすぐ上のレベルのフォルダーにある関数のみが使用できます。プライベート関数を使用してコードを別のファイルに分割したり、複数の関連する関数間でコードを共有したりできます。
関数が1つのステートメントから構成されていれば,無名関数を使用して,プログラムファイルを作成せずに関数を定義できます。無名関数の一般的な用途は,まず数式を定義し,MATLAB®の”関数を引数とする関数”,つまり入力に関数ハンドルを受け入れる関数を使用して数式を値の範囲に対して評価することです。
たとえば,以下のステートメントは無名関数に年代
という関数ハンドルを作成します。
S = @(x) sin(1) /x;
この関数は1つの入力x
をもっています。@
演算子が関数ハンドルを作成します。
次のように関数ハンドルを使用し,特定の値に対して関数を評価できます。
y = s(π)
y = 0.3130
また,関数ハンドルをfplot
のような値の範囲で評価する関数に渡すことができます。
范围= [0.01,0.1];fplot (s、范围)