定数値をもつクラス プロパティの定義
名前付き定数の定義
定数プロパティを定義する 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 classes
MyProject.ProjectInfo.Department
ans = Engineering
プロパティが Constant として宣言されている場合にのみ、そのプロパティの既定値として定義されているクラスのインスタンスを代入できます。
定数プロパティではイベントはサポートされない
定数プロパティではプロパティ イベントはサポートされません。MATLAB は、Constant プロパティの GetObservable または SetObservable 属性を true に設定した場合、クラスの初期化中に警告を発行します。