34.6.5 Value Classes vs. Handle Classes

Last-modified: 2025-03-09 (日) 09:06:31

34.6.5 値クラスとハンドルクラス

本質的に異なる 2 つのタイプのクラスがありclassdef、その主な違いは変数の割り当てに関する動作です。最初のタイプは値クラスです。

classdef value_class
 properties
   prop1
 endproperties
 methods
   function obj = set_prop1 (obj, val)
     obj.prop1 = val;
   endfunction
 endmethods
endclassdef

そのクラスのオブジェクトを別の変数に割り当てると、基本的に新しいオブジェクトが作成されます。

a = value_class ();

a.prop1 = 1;

b = a;

b.prop1 = 2;

b.prop1

⇒ ans =  2

a.prop1

⇒ ans =  1

しかし、これは、プロパティを変更するメソッドの出力を手動でオブジェクトに割り当てる必要がある場合もあることを意味します。

a = value_class ();

a.prop1 = 1;

a.set_prop1 (3);

⇒ ans =
<object value_class>

ans.prop1

⇒ ans =  3

a.prop1
2 番目のタイプはハンドル クラスです。これらのクラスは抽象handleクラスから派生する必要があります。

classdef handle_class < handle
 properties
   prop1
 endproperties
 methods
   function set_prop1 (obj, val)
     obj.prop1 = val;
   endfunction
 endmethods
endclassdef

次の例では、変数aと はbクラス のまったく同じオブジェクトを参照しますhandle_class。

a = handle_class ();

a.prop1 = 1;

b = a;

b.prop1 = 2;

b.prop1

⇒ ans =  2

a.prop1

⇒ ans =  2

ハンドル クラスのメソッドによって変更されるオブジェクト プロパティは永続的に変更されます。

a.set_prop1 (3);

a.prop1