ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

プロパティの定義

ユーザーが定義できるもの

以下の方法で、プロパティの定義を制御します。

メモ

MATLAB® コードでプロパティ名を使用する際は、必ず大文字と小文字を区別してください。プロパティはクラスと同じ名前をもつことはできません。

プロパティ値の初期化

プロパティ値を初期化するための基本的な手法は、2 つあります。

  • プロパティの定義において — MATLAB は、1 回だけ式を評価し、各インスタンスのプロパティに同じ値を割り当てます。

  • クラス コンストラクターにおいて — MATLAB は、各インスタンスに対し代入式を評価します。これにより、各インスタンスが一意の値をもつことが保証されます。

プロパティの既定値として代入する式の評価の詳細については、MATLAB による式の評価を参照してください。

プロパティの既定値

properties ブロック内で、個々のプロパティの既定値を制御できます。既定値を値または MATLAB 式として代入します。式は変数を参照できません。次に例を示します。

  • Prop1 — 代入が無いため既定値は空 []

  • Prop2 — 既定値として文字配列を代入

  • Prop3 — 既定値として式の結果を代入

classdef ClassName
   properties
      Prop1
      Prop2 = 'some text'
      Prop3 = sin(pi/12)
   end
end

クラス定義で既定のプロパティ値が指定されていない場合、MATLAB はプロパティ値を空の double ([]) に設定します。

メモ

プロパティの既定値の評価は、値が最初に必要になったときにのみ、MATLAB による初回のクラス初期化時に 1 回のみ行われます。MATLAB はクラスのインスタンスが作成されるたびに式を再評価することはありません。

プロパティの既定値として代入する式の評価の詳細については、クラス定義内の式の評価オブジェクトを含んだプロパティを参照してください。

コンストラクターからのプロパティ値の代入

クラス コンストラクター内からプロパティに値を割り当てるには、コンストラクターが返すオブジェクト (出力変数 obj) を参照します。

classdef MyClass
   properties
      Prop1
   end
   methods
      function obj = MyClass(intval)
         obj.Prop1 = intval;
      end
   end
end

クラス コンストラクター内でプロパティへの代入を行うと、MATLAB は作成された各オブジェクトについて代入ステートメントを評価します。そのプロパティに対し各オブジェクトに一意の値が含まれるようにする場合は、コンストラクターでプロパティ値を代入します。

たとえば、オブジェクトを作成するたびに、そのオブジェクトのプロパティに一意のハンドル オブジェクトを割り当てるとします。コンストラクターでプロパティにハンドル オブジェクトを割り当てます。ハンドル オブジェクト コンストラクターを呼び出して、ユーザー クラスの各インスタンスで一意のハンドル オブジェクトを作成します。

コンストラクター メソッドの詳細については、コンストラクターのオブジェクトの参照を参照してください。

一意の値でのプロパティの初期化

MATLAB でクラス定義が読み込まれるときに 1 回だけ、MATLAB はプロパティを指定した既定値に割り当てます。したがって、ハンドルクラス コンストラクターを使用してプロパティ値を初期化する場合は、このコンストラクターが 1 回だけ呼び出され、各インスタンスは同じハンドル オブジェクトを参照します。オブジェクトを作成するたびにプロパティ値をハンドル オブジェクトの新しいインスタンスに初期化する場合は、プロパティ値をコンストラクターで割り当てます。

プロパティの属性

どのプロパティにも、そのプロパティの動作の特性を変更する属性があります。指定された属性は、特定の properties ブロックのすべてのプロパティに適用されます。次に例を示します。

classdef ClassName
   properties (PropertyAttribute = value)
      Prop1
      Prop2
   end
end

たとえば、Salary および Password プロパティの変更とクエリができるのは、同じクラス定義のメソッドだけです。

classdef EmployeeInfo
   properties (Access = private)
      Salary
      Password
   end
end

この制限が存在するのは、クラスによってこれらのプロパティが、Access 属性を private に設定した properties ブロックで定義されているためです。

プロパティの属性

指定できるプロパティの属性の説明については、プロパティの属性を参照してください。

プロパティ アクセス メソッド

MATLAB は、プロパティ値の設定またはクエリ時に常に呼び出しを行います。以下の構文をもつ methods ブロックで、属性を指定せずにプロパティの set アクセス メソッドまたは get アクセス メソッドを定義します。

methods

   function obj = set.PropertyName(obj,value)
      ...
   end

   function value = get.PropertyName(obj)
      ...
   end

end

MATLAB では、プロパティの定義ブロックで指定された既定値を割り当てるときに、プロパティの set アクセス メソッドは呼び出されません。

たとえば、set.Password メソッドは、Password という名前のプロパティに代入された文字配列の長さをテストします。プロパティに代入された値が 7 文字未満の場合、MATLAB はエラーを返します。それ以外の場合、MATLAB は指定された値をプロパティに代入します。

function obj = set.Password(obj,pw)
   if numel(pw) < 7
      error('Password must have at least 7 characters')
   else
      obj.Password = pw;
end

プロパティ アクセス メソッドの詳細については、プロパティ アクセス メソッドを参照してください。

変数を使用したオブジェクト プロパティの参照

MATLAB は、以下の形式の式を使用して char 変数からプロパティ名を解決します。

object.(PropertyNameVar)

ここで、PropertyNameVar は、有効なオブジェクト プロパティの名前を含む変数です。この構文は、プロパティ名を引数として渡すときに使用します。たとえば、関数 getPropValue は KeyType プロパティの値を返します。

PropName = 'KeyType';
function o = getPropValue(obj,PropName)
   o = obj.(PropName);
end

関連するトピック