Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

定数値をもつクラス プロパティの定義

名前付き定数の定義

定数プロパティを定義する MATLAB® クラスを作成することにより、名前により参照できる定数を定義できます。

定数プロパティを使用して、名前でアクセスできる定数値を定義します。プロパティ ブロックで Constant 属性を宣言して、定数プロパティをもつクラスを作成します。Constant 属性を設定すると、そのプロパティ ブロックで指定された値に初期化された後、その値は変更できなくなります。

定数プロパティへの値の割り当て

Constant プロパティには、MATLAB 式など任意の値を割り当てます。以下に例を示します。

classdef NamedConst
   properties (Constant)
      R = pi/180
      D = 1/NamedConst.R
      AccCode = '0145968740001110202NPQ'
      RN = rand(5)
   end
end

MATLAB は、クラスを読み込むときに式を評価します。そのため、MATLAB が RN に代入する値は、関数 rand の単一の呼び出しの結果となり、その後の NamedConst.RN への参照で変更されることはありません。clear classes を呼び出すと、MATLAB がクラスを再度読み込み、定数プロパティを再度初期化します。

定数プロパティの参照

クラス名とプロパティ名を使用して定数を以下のように参照します。

ClassName.PropName

たとえば、前節で定義された NamedConst クラスを使用するために、定数を度からラジアンに変換した Rを参照します。

radi = 45*NamedConst.R
radi =

    0.7854

パッケージの定数

名前を使ってアクセスできる定数値のライブラリを作成するには、まずパッケージ フォルダーを作成し、次に定数を整理するためにさまざまなクラスを定義します。たとえば、天文学の計算に便利な一連の定数を実装するために、constants という名前のパッケージに AstroConstants クラスを定義します。

+constants/@AstroConstants/AstroConstants.m

クラスは、割り当てられた値をもつ一連の Constant プロパティを定義します。

classdef AstroConstants
   properties (Constant)
   C = 2.99792458e8     % m/s
   G = 6.67259          % m/kgs
   Me = 5.976e24        % Earth mass (kg)
   Re = 6.378e6         % Earth radius (m)
   end
end

この定数のセットを使用するためにそれらを完全修飾のクラス名で参照してください。たとえば、次の関数は AstroContants に定義された定数のいくつかを使用します。

function E = energyToOrbit(m,r)
   E = constants.AstroConstants.G * constants.AstroConstants.Me * m * ...
      (1/constants.AstroConstants.Re-0.5*r);
end

パッケージを関数にインポートすると、パッケージ名を繰り返す必要がなくなります (import を参照してください)。

function E = energyToOrbit(m,r)
   import constants.*;
   E = AstroConstants.G * AstroConstants.Me * m * ...
      (1/AstroConstants.Re - 0.5 * r);
end

ハンドル オブジェクトを代入した定数プロパティ

ハンドル オブジェクトである値をもつ定数プロパティがクラスで定義されている場合、そのハンドル オブジェクトのプロパティに値を代入できます。そのハンドル オブジェクトにアクセスするには、ローカル変数を作成します。

たとえば、ConstMapClass クラスは定数プロパティを定義します。この定数プロパティの値はハンドル オブジェクトです (containers.Map オブジェクト)。

classdef ConstMapClass < handle
   properties (Constant)
      ConstMapProp = containers.Map
   end
end

Date キーに現在の日付を代入するには、定数プロパティからハンドルを返し、次に代入ステートメントの左辺のローカル変数を使用して代入を行います。

localMap = ConstMapClass.ConstMapProp
localMap('Date') = datestr(clock);

代入ステートメントの左辺の定数プロパティへの参照は使用できません。たとえば、MATLAB は以下のステートメントを、ConstMapProp フィールドをもつ ConstMapClass という名前の struct を作成するものと解釈します。

ConstMapClass.ConstMapProp('Date') = datestr(clock);

任意のオブジェクトを代入した定数プロパティ

定義クラスのインスタンスを定数プロパティに代入できます。MATLAB は定数プロパティに代入されるインスタンスをクラスの読み込み時に作成します。この手法は、定義クラスが handle クラスである場合にのみ使用します。

MyProject はこのようなクラスの一例です。

classdef MyProject < handle
   properties (Constant)
      ProjectInfo = MyProject
   end
   properties
      Date
      Department
      ProjectNumber
   end
   methods (Access = private)
      function obj = MyProject
         obj.Date = datestr(clock);
         obj.Department = 'Engineering';
         obj.ProjectNumber = 'P29.367';
      end
   end
end

Constant プロパティを介してプロパティのデータを参照します。

MyProject.ProjectInfo.Date
ans =

18-Apr-2002 09:56:59

MyProject はハンドル クラスであるため、定数プロパティに代入されるインスタンスのハンドルを取得できます。

p = MyProject.ProjectInfo;

このハンドルを使用して MyProject クラス内のデータにアクセスします。

p.Department
ans =

Engineering

このハンドルを使用して MyProject クラスの非定数プロパティを変更します。

p.Department = 'Quality Assurance';

p は、ProjectInfo 定数プロパティに代入されている MyProject のインスタンスのハンドルです。

MyProject.ProjectInfo.Department
ans =

Quality Assurance

クラスをクリアすると、MyProject の新しいインスタンスが ProjectInfo プロパティに代入されます。

clear MyProject
MyProject.ProjectInfo.Department
ans =

Engineering

プロパティが Constant として宣言されている場合にのみ、そのプロパティの既定値として定義されているクラスのインスタンスを代入できます。

定数プロパティ — get イベントをサポートしない

定数プロパティは PreGet プロパティまたは PostGet イベントをサポートしません。MATLAB は、Constant プロパティの GetObservable 属性を true に設定した場合、クラスの初期化中に警告を発行します。

関連する例

詳細