依存プロパティの get メソッドおよび set メソッド
依存プロパティにはデータが保存されません。依存プロパティの値は、非依存プロパティの値などの他の値に依存します。次の構文を使用して依存プロパティを定義します。
properties (Dependent) PropertyName end
依存プロパティではデータを保存しないため、プロパティがクエリされたときにプロパティの値が決定されるよう、get メソッド (get.) を定義しなければなりません。 PropertyName
依存プロパティでは set メソッド (set.) も設定できますが、set メソッドは実際には依存プロパティの値を設定できません。しかし、set メソッドにはその他のコードを含めることができます。たとえば、依存プロパティに関連するプロパティの値を設定できます。PropertyName
get メソッドおよび set メソッドの定義の紹介については、プロパティの get メソッドおよび set メソッドを参照してください。
依存プロパティの get メソッドの定義
Account クラスは米ドルで金額を保存し、次の 3 つの通貨のいずれかで換算された値を返すことができます。米ドル、ユーロ、日本円。換算された値は依存プロパティ Balance によって表されます。get.Balance メソッドは USDollarAmount および Currency を使用して為替レートを判別し、Balance プロパティを計算します。
classdef Account properties Currency {mustBeMember(Currency,["USD","EUR","JPY"])} = "USD" USDollarAmount = 0 end properties (Dependent) Balance end methods function value = get.Balance(obj) c = obj.Currency; switch c case "EUR" v = obj.USDollarAmount/0.98; case "JPY" v = obj.USDollarAmount/0.0069; otherwise v = obj.USDollarAmount; end value = v; end end end
Account のインスタンスを作成します。USDollarAmount プロパティと Currency プロパティを設定します。
a = Account;
a.USDollarAmount = 100;
a.Currency = "JPY";get メソッドを明示的に呼び出すことはできません。Balance にアクセスすると、MATLAB® が get メソッドを呼び出して円に換算された最初の金額を返します。
a.Balance
ans =
1.4493e+04MATLAB はオブジェクトを表示する際にも get メソッドを呼び出します。ステートメントをセミコロンで終了せずに Currency をユーロに設定した場合、MATLAB は Balance get メソッドを呼び出して更新された値を表示します。
a.Currency = "EUR"a =
Account with properties:
Currency: "EUR"
USDollarAmount: 100
Balance: 102.0400依存プロパティをもつ set メソッドを使用するケース
依存プロパティでは値が保存されませんが、その値に対して set メソッドを定義することはできます。set メソッドでは依存プロパティの値を設定できませんが、その他のコードを実行することはできます。
たとえば、propertyChange が、OldPropName という名前のプロパティを最初に定義した値クラスであるものとします。set メソッドを使用して、クラス ユーザーの観点からプロパティ名を変更できます。
OldPropNameを依存および非表示として再定義します。OldPropNameを置き換える名前を使用して新しいプロパティを定義します。NewPropNameに値を保存するOldPropNameの set メソッドを定義します。NewPropNameに保存された値を返すOldPropNameの get メソッドを定義します。
classdef propertyChange properties NewPropName end properties (Dependent,Hidden) OldPropName end methods function obj = set.OldPropName(obj,val) obj.NewPropName = val; end function value = get.OldPropName(obj) value = obj.NewPropName; end end end
OldPropName にアクセスするコードは引き続き想定どおりに動作します。また、OldPropName を非表示にすることで、新しいユーザーに古いプロパティ名が表示されるのを防ぐことができます。
たとえば、propertyChange のインスタンスを作成します。古いプロパティ名を使用してプロパティ値を設定してから、オブジェクトを表示します。MATLAB はその値を新しい名前のプロパティに設定し、表示します。
a = propertyChange;
a.OldPropName = "hello"a =
propertyChange with properties:
NewPropName: "hello"