プロパティと入力値の検証
この例では、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
参考
validateInputsImpl
| validatePropertiesImpl