メインコンテンツ

補助関数によるアプリでのコードの再利用

補助関数は、アプリ内で使用するために定義する MATLAB® 関数です。補助関数を定義した後に、アプリ コード内のさまざまな場所でその関数を呼び出すことができます。たとえば、アプリ ユーザーがスライダーの数値を変更するか、ドロップダウン リストの項目を選択した後に、補助関数を呼び出してプロットを更新できます。補助関数を作成すると、共通のコマンドを単一ソースにすることができ、冗長なコードを維持する必要がなくなります。

アプリの補助関数は、App Designer または MATLAB プログラム ファイルで定義できます。関数コードでアプリをどのように操作するかに基づいて方法を選択します。

方法使用時
App Designer で補助関数を作成する。
  • コードでユーザー インターフェイスを更新するか、アプリ内のコンポーネントにアクセスする必要がある。

  • アプリの実行中にのみ関数を実行する。

MATLAB プログラム ファイル (.m) で補助関数を作成する。
  • MATLAB スクリプトまたは関数でコードが既に作成されていて、そのコードをアプリから実行する。

  • MATLAB の複数の独立したアプリまたはプロジェクト間でコードを共有する。

  • コードでユーザー インターフェイスのいかなる部分も直接更新せず、いかなる部分からもデータを読み取らない。

  • アプリとは独立してコードを実行またはテストする。

App Designer での補助関数の作成

App Designer で作成できる補助関数には、アプリ内からのみ呼び出せる "プライベート関数" と、アプリの内部と外部のどちらからでも呼び出せる "パブリック関数" の 2 種類があります。プライベート関数は一般に単一ウィンドウのアプリで使用され、パブリック関数は一般にマルチウィンドウ アプリで使用されます。

App Designer で [コード ビュー] から補助関数を作成します。ツールストリップの [エディター] タブで [関数] をクリックし、[プライベート関数] または [パブリック関数] を選択します。

Function drop-down list with options "Private Function" and "Public Function"

選択すると、App Designer によってアプリ コード内にテンプレート関数が作成され、カーソルがその関数の本体に置かれます。その後、関数名とその引数を更新し、関数本体にコードを追加できます。app 引数は必須であり、app 入力を使用してアプリ内のコンポーネントおよびプロパティにアクセスできます。app 引数の後に任意の追加の引数を含めることができます。

たとえば、updatePlot という名前の次の関数は peaks 関数の表面プロットを作成します。これは、プロットに表示するサンプル数を指定する追加の引数 n を受け入れます。

function updatePlot(app,n)
    surf(app.UIAxes,peaks(n));
    colormap(app.UIAxes,winter);
end

プライベート関数の呼び出し

関数を定義したアプリ内からのみその関数を呼び出す場合は、プライベート関数を定義します。アプリ内の任意の場所から関数を呼び出すことができます。

たとえば、アプリに同じプロット上のパラメーターを制御するスライダーおよびドロップダウン コンポーネントが含まれている場合、updatePlot 関数をプライベート関数として定義します。いずれかのコンポーネント値が変更されたときに、コンポーネントのコールバック関数から updatePlot 関数を呼び出して、プロットされたデータを更新します。

function SliderValueChanged(app,event)
    value = app.Slider.Value;
    updatePlot(app,value)        
end

function DropDownValueChanged(app,event)
    value = app.DropDown.Value;
    num = str2double(value);
    updatePlot(app,num)        
end

パブリック関数の呼び出し

アプリの実行中にアプリ外から関数を呼び出す場合は、パブリック関数を定義します。パブリック関数は、複数のアプリ ファイルで構成されたマルチウィンドウ アプリがある場合に役立ちます。いずれかのアプリで定義されたパブリック関数を別のアプリから呼び出すことができます。

たとえば、プロットを含むセカンダリ アプリを作成するボタンを備えたメイン アプリがある場合、updatePlot 関数をパブリック関数として定義します。ButtonPushedFcn コールバックから updatePlot 関数を呼び出すことで、メイン アプリからプロットを更新します。

function CreatePlotButtonPushed(app,event)
    secondaryApp = MyPlotApp;
    updatePlot(secondaryApp,10)       
end

マルチウィンドウ アプリの詳細については、App Designer でのマルチウィンドウ アプリの作成を参照してください。

補助関数の管理

App Designer で定義した補助関数は、[コード ブラウザー] を使用して管理できます。たとえば、[コード ブラウザー] を使用して次のタスクを実行できます。

  • App Designer で定義されているすべての補助関数を表示する — [コード ビュー][コード ブラウザー] で、[関数] タブを選択します。

  • 補助関数を検索する — [関数] タブの上部にある [検索] ボックスを使用します。

  • 補助関数の名前を変更する — 関数名をダブルクリックし、新しい名前を入力します。名前を変更すると、App Designer により、アプリ コード内の関数に対する参照がすべて自動的に更新されます。

  • 補助関数に移動する — 関数名をクリックし、関数定義をスクロールして表示します。関数名を右クリックし、[移動] を選択して関数内にカーソルを置きます。

  • 補助関数を削除する — 関数名を右クリックし、[削除] を選択します。

MATLAB プログラム ファイルでの補助関数の作成

複数の独立したアプリまたはプロジェクト間でコードを再利用するには、App Designer の外部の MATLAB プログラム ファイルで補助関数を定義します。スクリプト内に既存のコードがある場合は、スクリプトを関数に変換できます。詳細については、スクリプトと関数を参照してください。

アプリで呼び出すことができる新しい関数を作成するには、次の手順に従います。

  1. MATLAB で新しい関数ファイルを作成します。詳細については、関数のファイルでの作成を参照してください。

  2. コンポーネント値など、関数がアプリから必要とするデータの関数入力を定義します。

  3. 計算結果など、アプリが関数から必要とするデータの関数出力を定義します。

  4. アプリ ファイルと同じフォルダー内や MATLAB 検索パス上など、アプリ ファイルからアクセスできる場所に関数ファイルを追加します。

その後、アプリ コードから関数を呼び出すことができます。

たとえば、選択した日付と現在の日付の間の日数を表示するために、日付の計算を実行する MATLAB 関数を作成できます。アプリ ファイルと同じフォルダーに calculateDate.m という名前の関数ファイルを作成します。日付を受け取り、現在の日とその日付の間の日数を返す関数を定義します。

function numdays = calculateDate(date)
dur = date - datetime("today");
numdays = days(dur);
end

App Designer でアプリ コードからこの関数を呼び出します。たとえば、アプリに日付ピッカーが含まれている場合、日付ピッカーの ValueChangedFcn コールバックから calculateDate 関数を呼び出してアプリを更新します。

function DatePickerValueChanged(app,event)
    value = app.DatePicker.Value;
    numdays = calculateDate(value);
    app.CountdownLabel.Text = "Your date is " + numdays + " days away";
end

例: プロットを更新する補助関数

このアプリは、補助関数を使用して、プロットの初期化と更新の両方を行う方法を示します。このアプリでは、アプリの起動時に startupFcn コールバックの最後で updatePlot プライベート補助関数を呼び出してプロットを初期化します。UITableDisplayDataChanged コールバックは、ユーザーが列を並べ替えたり、テーブル内の値を変更したりしたときに同じプロットを更新するためにも updatePlot 関数を呼び出します。

参考

トピック