Main Content

論理式でのハンドル

ハンドル オブジェクトは論理値 true または false として評価されません。対象の状態をテストして論理値を返す関数を使用しなければなりません。

ハンドルが有効かどうかの判定

変数に有効なグラフィックス オブジェクトのハンドルが格納されているかどうかを判定するには、isgraphics を使用します。たとえば、hobj がワークスペースの変数とします。この変数を操作する前に、その有効性をテストします。

if isgraphics(hobj)
   ...
end

オブジェクトのタイプも判定できます。

if isgraphics(hobj,'figure')
   ...% hobj is a figure handle
end

結果が空かどうかの判定

論理ステートメント内で空のオブジェクトを直接使用することはできません。isempty を使用して、論理ステートメント内で使用できる論理値を返させます。

一部のプロパティには、他のオブジェクトへのハンドルが格納されます。そのオブジェクトが存在しない場合、プロパティには空のオブジェクトが含まれます。

close all
hRoot = groot;
hRoot.CurrentFigure
ans = 

0x0 empty GraphicsPlaceholder array.

たとえば、ルートの CurrentFigure プロパティをクエリして現在の Figure があるかどうかを判定するには、関数 isempty を使用します。

hRoot = groot;
if ~isempty(hRoot.CurrentFigure)
   ... % There is a current figure
end

コードが空のオブジェクトに遭遇する可能性があるもう 1 つのケースは、ハンドルを検索する場合です。たとえば、Figure の Tag プロパティに文字ベクトル 'myFigure' を設定し、findobj を使用してこの Figure のハンドルを取得する場合を考えます。

if isempty(findobj('Tag','myFigure'))
   ... % That figure was NOT found
end

一致が見つからない場合、findobj は空のオブジェクトを返します。

ハンドルが等価かどうかの判定

ハンドル同士が等しくなる状態は 2 つあります。

  • 任意の 2 つのハンドルが同じオブジェクトを参照する場合 (== を使用してテスト)

  • 任意の 2 つのハンドルによって参照されるオブジェクトが同じクラスに属し、すべてのプロパティに同じ値が設定されている場合 (isequal を使用してテスト)

hTag プロパティに myFigure の値をもつ Figure のハンドルであるかどうかを判定するとします。

if h == findobj('Tag','myFigure')
   ...% h is correct figure
end

別のオブジェクトが同じ状態にあるかどうかを判定するには、isequal を使用します。

hLine1 = line;
hLine2 = line;
isequal(hLine1,hLine2)
ans =

     1