Main Content

関数のファイルでの作成

スクリプトと関数のどちらでも、プログラム ファイルに格納することでコマンドのシーケンスを再利用できます。スクリプトは最もシンプルなタイプのプログラムで、コマンド ラインで入力するとおりのコマンドを格納します。関数はさらに高い柔軟性を提供します。その主な理由は、入力値を渡して出力値を返すことができるからです。たとえば、次の fact という関数は、数値 (n) の階乗を計算し、結果 (f) を返します。

function f = fact(n)
    f = prod(1:n);
end

このタイプの関数は、コマンド ラインではなく、ファイル内で定義しなければなりません。多くの場合、関数はそれぞれ独自のファイルに格納します。その場合、ベスト プラクティスとしては関数とファイルに同じ名前 (この例では fact.m) を使用します。これは、MATLAB® がプログラムをファイル名に関連付けるためです。ファイルは現在のフォルダーか MATLAB 検索パス上のフォルダーに保存します。

MATLAB と共にインストールされる関数と同じ構文ルールを使用して、コマンド ラインから関数を呼び出すことができます。たとえば、5 の階乗は次のように計算します。

x = 5;
y = fact(5)
y =

   120

R2016b 以降、関数を格納するもう 1 つのオプションとして、スクリプト ファイルの末尾に関数を含めることができます。たとえば、いくつかのコマンドと fact および perm の 2 つの関数を含む mystats.m というファイルを作成します。スクリプトは (3,2) の置換を計算します。

x = 3;
y = 2;
z = perm(x,y)

function p = perm(n,r)
    p = fact(n)/fact(n-r);
end

function f = fact(n)
    f = prod(1:n);
end

コマンド ラインからスクリプトを呼び出します。

mystats
z =

     6

関数定義の構文

各関数の 1 行目は定義ステートメントです。これには以下の要素が含まれます。

function キーワード (必須)

キーワードには小文字を使用します。

出力引数 (オプション)

関数が 1 つの出力を返す場合、function キーワードの後に出力名を指定できます。

function myOutput = myFunction(x)

関数が複数の出力を返す場合、出力名を大かっこで囲みます。

function [one,two,three] = myFunction(x)

出力がない場合は省略できます。

function myFunction(x)

または、空の大かっこを使用できます。

function [] = myFunction(x)

関数名 (必須)

有効な関数名は、変数名の規則に準拠します。名前は文字で始まり、文字、数字、アンダースコアの組み合わせを使用できます。

メモ

混乱を避けるため、関数ファイル名とファイル内の最初の関数は同じ名前にします。MATLAB はプログラムを関数名ではなく、"ファイル" の名前に関連付けます。スクリプト ファイルに、ファイル内の関数と同じ名前を付けることはできません。

入力引数 (オプション)

関数が何らかの入力を受け取る場合、関数名の後にそれらの引数名を小かっこで囲みます。入力はコンマで区切ります。

function y = myFunction(one,two,three)

入力がない場合、小かっこを省略できます。

ヒント

複数の入力または出力引数を指定して関数を定義する場合、必須引数を最初にリストします。この順序付けにより、オプションの引数を指定せずに関数を呼び出すことが可能になります。

関数とファイルの内容

関数の本体には、有効な MATLAB 式、制御フロー ステートメント、コメント、空行、入れ子関数を含めることができます。関数内に作成した変数は、ベース ワークスペースとは別の、その関数に固有のワークスペース内に格納されます。

プログラム ファイルには複数の関数を含めることができます。ファイルに関数定義のみが含まれる場合、最初の関数がメイン関数であり、MATLAB がファイル名と関連付ける関数です。メイン関数またはスクリプト コードの後の関数は、ローカル関数と呼ばれます。ローカル関数は、ファイル内でのみ使用できます。

end ステートメント

関数は、end ステートメント、ファイルの終了またはローカル関数の定義行のいずれかが最初に発生した時点で終了します。end ステートメントは次の場合に必要です。

  • ファイル内のいずれかの関数に入れ子関数 (親関数内に完全に含まれている関数) が含まれている。

  • 関数が関数ファイル内のローカル関数であり、ファイル内のローカル関数のいずれかが end キーワードを使用している。

  • 関数がスクリプト ファイル内のローカル関数である。

これはオプションの場合もありますが、コードの可読性を向上させるには、end を使用します。

参考

関連するトピック

外部の Web サイト