プロパティの get メソッドおよび set メソッド
関連プロパティにアクセスされるたびに MATLAB® が自動的に呼び出すプロパティの get メソッドおよび set メソッドを定義できます。get メソッドまたは set メソッドを特定のプロパティに関連付けるには、それぞれ get.
および PropertyName
set.
という形式を使用して get メソッドおよび set メソッドを指定します。 PropertyName
get メソッドおよび set メソッドでは、プロパティにアクセスするだけではなく、それ以上の追加ステップを実行できます。次の場合に get メソッドを使用します。
依存プロパティの値を計算する。
ユーザーに表示するのとは異なる形式でデータを保存する。
次の場合に set メソッドを使用します。
組み込みの検証手法でサポートされるより複雑なプロパティ検証を設計する。
カスタム エラー メッセージを発行する。
ハードウェア デバイスとの接続の確立や更新、ファイルを開く操作など、プロパティ値変更の直接の結果であるアクションを実行して、リソースへのアクセスを確保する。
get メソッドおよび set メソッドにより、クラスにオーバーヘッドが追加されます。頻繁にアクセスするプロパティの get メソッドおよび set メソッドで計算負荷の高い複雑な操作は行わないでください。
メモ
このトピックで説明している get メソッドおよび set メソッドを直接呼び出すことはできません。MATLAB は、プロパティ値にアクセスするときにこれらのメソッドを自動的に呼び出します。ユーザーによる呼び出しが可能な get メソッドおよび set メソッドの実装の詳細については、プロパティの Set/Get インターフェイスの実装を参照してください。
プロパティの get メソッド
関連プロパティ値がクエリされるたびに MATLAB が自動的に呼び出す get メソッドを定義できます。get メソッドはプロパティ値を返す必要があります。get メソッドでは次の構文使用します。ここで、PropertyName
はプロパティの名前です。
methods function value = get.PropertyName(obj) ... end end
get メソッドまたは set メソッドを定義しているメソッド ブロックでは属性を指定できません。
たとえば、triangleArea
クラスは Area
プロパティの get メソッドを定義します。Area
は依存プロパティとして定義されます。つまり、値を保存しません。Area
の get メソッドはオンデマンドで値を計算します。(依存プロパティの詳細については、依存プロパティの get メソッドおよび set メソッドを参照してください。)
classdef triangleArea properties Base = 1 Height = 1 end properties (Dependent) Area end methods function a = get.Area(obj) disp("Executing get.Area method.") a = 0.5*obj.Base*obj.Height; end end end
triangleArea
のインスタンスを作成します。
a = triangleArea
a = Executing get.Area method. triangleArea with properties: Base: 1 Height: 1 Area: 0.5000
オブジェクトを表示する際に、MATLAB は表示するプロパティの定義されている get メソッドを呼び出します。ここでは、get.Area
を呼び出し、Base
および Height
の既定値に基づいて Area
の値を計算します。get メソッドでエラーが発生した場合は、MATLAB はそのエラーを非表示にし、そのプロパティを表示しません。
Base
および Height
の値を変更し、Area
に再度アクセスします。
a.Base = 3; a.Height = 4; a.Area
Executing get.Area method. ans = 6
get メソッドの使用法
get メソッドは再帰的に呼び出されません。
値オブジェクト (つまり、
handle
クラスから派生したものではないもの) をコピーする場合、あるオブジェクトから他のオブジェクトにプロパティ値をコピーするときには get メソッドは呼び出されません。
プロパティ の set メソッド
関連プロパティ値に値が代入されるたびに MATLAB が自動的に呼び出す set メソッドを定義できます。set メソッドは、クラスが値クラスまたはハンドル クラスのいずれであるのかに応じて、以下の構文を使用します。
値クラスの set メソッドは、変更されたオブジェクトを返さなければなりません。
methods function obj = set.PropertyName(obj,value) ... end end
ハンドル クラスの set メソッドは、変更されたオブジェクトを返す必要はありません。
methods function set.PropertyName(obj,value) ... end end
get メソッドまたは set メソッドを定義しているメソッド ブロックでは属性を指定できません。
たとえば、symPosDef
はプロパティ検証用に set メソッドを使用します。inputMatrix
プロパティが新しい値に設定されると、set メソッドは関数 chol
を呼び出して、入力行列が対称正定値かどうかを判別します。そうである場合、メソッドは inputMatrix
をその値に設定します。そうでない場合、メソッドはカスタム エラー メッセージを返します。
classdef symPosDef properties inputMatrix = [1 0; 0 1] end methods function obj = set.inputMatrix(obj,val) try chol(val) obj.inputMatrix = val; catch ME error("inputMatrix must be symmetric positive definite.") end end end end
symPosDef
のインスタンスを作成し、inputMatrix
を対称正定値行列ではない値に設定しようとします。
s = symPosDef; s.inputMatrix = [1 2; 1 1]
Error using symPosDef/set.inputMatrix inputMatrix must be symmetric positive definite.
set メソッドの使用法
set メソッドは再帰的に呼び出されません。
オブジェクトの初期化中に既定値をプロパティに代入するときに、MATLAB は set メソッドを呼び出しません。ただし、コンストラクターでプロパティ値を設定する際には set メソッドを呼び出します。
オブジェクトが読み込まれたときに MATLAB は set メソッドを呼び出します。
MATLAB が値オブジェクト (つまり、
handle
でない任意のオブジェクト) をコピーする場合、あるオブジェクトから別のオブジェクトにプロパティ値をコピーするときに set メソッドは呼び出されません。AbortSet
属性をtrue
にしてプロパティを定義した場合、現在の値と同じ値を代入する際にそのプロパティの set メソッドは呼び出されません。ただし、プロパティに get メソッドがある場合には、値を比較できるようにそのメソッドが呼び出されます。この属性の詳細については、プロパティ値が変化しない場合の代入を参照してください。