Main Content

プロパティと入力値の検証

この例では、System object™ に指定された入力値とプロパティ値が有効であることを検証する方法を示します。

単一のプロパティの検証

他のプロパティとは別に、1 つのプロパティ値を検証するには、MATLAB クラスのプロパティ検証を使用します。この例では、論理プロパティ、正の整数のプロパティ、および 3 つの値のいずれかをとる必要がある string プロパティの指定方法を説明します。

 properties
    UseIncrement (1,1) logical = false
    WrapValue (1,1) {mustBePositive, mustBeInteger} = 1
    Color (1,1) string {mustBeMember(Color, ["red","green","blue"])} = "red"
 end

相互依存するプロパティの検証

2 つ以上の相互依存するプロパティの値を検証するには、validatePropertiesImpl を使用します。この例では、論理プロパティ (UseIncrement) が true で、WrapValue の値が Increment より大きいことを確認するために、validatePropertiesImpl を記述する方法を説明します。

 methods (Access = protected)
    function validatePropertiesImpl(obj)
        if obj.UseIncrement && obj.WrapValue > obj.Increment
          error("Wrap value must be less than increment value");
        end
    end
 end

入力の検証

入力値を検証するには、validateInputsImpl メソッドを使用します。この例では、最初の入力が数値であることを検証する方法を示します。

methods (Access = protected)
   function validateInputsImpl(~,x)
      if ~isnumeric(x)
         error("Input must be numeric");
      end
   end
end        

完全なクラスの例

この例は、各タイプの検証構文の例を示す完全な System object です。

classdef AddOne < matlab.System
% ADDONE Compute an output value by incrementing the input value
  
  % All properties occur inside a properties declaration.
  % These properties have public access (the default)
  properties
    UseIncrement (1,1) logical = false
    WrapValue (1,1) {mustBePositive, mustBeInteger} = 10
    Increment (1,1) {mustBePositive, mustBeInteger} = 1
  end

  methods (Access = protected)
    function validatePropertiesImpl(obj)
        if obj.UseIncrement && obj.WrapValue > obj.Increment
          error("Wrap value must be less than increment value");
        end
    end
    
    % Validate the inputs to the object
    function validateInputsImpl(~,x)
        if ~isnumeric(x)
          error("Input must be numeric");
        end
    end
        
    function out = stepImpl(obj,in)
      if obj.UseIncrement
        out = in + obj.Increment;
      else
        out = in + 1;
      end
    end    
  end
end

参考

|

関連するトピック