Функции проверки свойств

Свойство валидации Используя функции

Используйте функции валидации свойства в определениях классов, чтобы ввести определенные ограничения для значений свойств. Функция валидации принимает потенциальное значение свойства как аргумент и выдает ошибку, если значение не удовлетворяет конкретное требование, наложенное функцией.

Во время процесса валидации MATLAB® передает значение каждой функции валидации, перечисленной в определении класса. MATLAB вызывает каждую функцию слева направо и выдает первую ошибку, с которой сталкиваются. Значение, переданное функциям валидации, является результатом любого преобразования, примененного спецификациями размера и классом. Для получения дополнительной информации о классе и валидации размера, смотрите Валидацию Класса и Размера Свойства.

Для списка функций валидации MATLAB см. Функции валидации MATLAB

Синтаксис функций валидации

Задайте функции валидации как список, разделенный запятыми имен функций или вызовов функции с аргументами, заключенными в фигурные скобки.

classdef MyClass
   properties
      Prop {fcn1,fcn2,...} = defaultValue
   end
end

MATLAB передает потенциальное значение свойства функции валидации неявно. Однако, если функция валидации требует входных параметров в дополнение к потенциальному значению свойства, то необходимо включать и свойство и дополнительные аргументы. Дополнительные аргументы должны быть литеральными значениями и не могут сослаться на переменные. Литеральные значения являются несимвольными представлениями, такими как числа и текст.

Например, рассмотрите функциональный mustBeGreaterThan. Это требует предельного значения как входного параметра. Эта функция валидации требует, чтобы значение свойства было больше, чем это предельное значение.

Передайте свойство в качестве первого аргумента. Используйте имя свойства, но не заключайте имя в кавычки. Это определение свойства ограничивает Prop значениями, больше, чем 10.

properties
   Prop {mustBeGreaterThan(Prop,10)}
end

Используя функции валидации

Следующий класс задает функции валидации для каждого свойства.

  • Data должен быть числовым и конечным.

  • Interp должен быть одной из этих трех перечисленных опций. Задайте значение по умолчанию для этого свойства удовлетворить это требование.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp {mustBeMember(Interp,{'linear','cubic','spline'})} = 'linear'
   end
end

Создание объекта по умолчанию класса показывает начальные значения.

a = ValidatorFunction
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: 'linear'

Присвоение значений к свойствам вызывает функции валидации.

a.Data = 'cubic'
Error setting property 'Data' of class 'ValidatorFunction':
Value must be numeric.

Поскольку валидация свойства Data не включает числовой класс, нет никакого преобразования вектора char к числовому значению. Если вы изменяете валидацию свойства Data задать класс как double, MATLAB преобразовывает вектор char в массив double.

properties
   Data double {mustBeNumeric, mustBeFinite}
end

Присвоение на вектор char не производит ошибку, потому что MATLAB преобразовывает вектор char, чтобы классифицировать double.

a.Data = 'cubic'
a = 

  ValidatorFunction with properties:

      Data: [99 117 98 105 99]
    Interp: 'linear'

Присвоение на свойство Interp требует точного совпадения.

a = ValidatorFunction;
a.Interp = 'cu'
Error setting property 'Interp' of class 'ValidatorFunction':
Value must be a member of this set
    linear
    cubic
    spline

Используя перечисление класс обеспечивает неточное соответствие и нечувствительность к регистру.

Класс перечисления для неточного соответствия

Валидация свойства с помощью класса перечисления обеспечивает эти преимущества:

  • Неточное, нечувствительное к регистру соответствие для однозначных символьных векторов или скаляров строки

  • Преобразование неточных соответствий к правильным значениям

Например, предположите, что вы задаете класс перечисления InterpMethod для валидации свойства Interp.

classdef InterpMethod
   enumeration
      linear
      cubic
      spline
   end
end

Измените валидацию свойства Interp, чтобы использовать класс InterpMethod.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp InterpMethod
   end
end

Присвойте значение, совпадающее с первыми несколькими буквами от 'cubic'.

a = ValidatorFunction;
a.Interp = 'cu'
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: cubic

Функции валидации MATLAB

MATLAB задает функции для использования в валидации свойства. Эти функции поддерживают шаблоны общего использования для валидации свойства и предоставляют описательные сообщения об ошибке. Эта таблица приводит функции валидации MATLAB, их значения и функции MATLAB, используемые функциями валидации.

Имя

Значение

Зависимости

mustBePositive(A)

A > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(A)

A <= 0

ge, isreal, isnumeric, islogical

mustBeFinite(A)

A не имеет никакого NaN и никаких элементов Inf.

isfinite

mustBeNonNan(A)

A не имеет никаких элементов NaN.

isnan

mustBeNonnegative(A)

A >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(A)

A < 0

lt, isreal, isnumeric, islogical

mustBeNonzero(A)

A ~= 0

eq, isnumeric, islogical

mustBeGreaterThan(A,B)

A > B

gt, isscalar, isreal, isnumeric, islogical

mustBeLessThan(A,B)

A < B

lt, isreal, isnumeric, islogical

mustBeGreaterThanOrEqual(A,B)

A >= B

ge, isreal, isnumeric, islogical

mustBeLessThanOrEqual(A,B)

A <= B

le, isreal, isnumeric, islogical

mustBeNonempty(A)

A не пуст

isempty

mustBeNonsparse(A)

A не имеет никаких разреженных элементов.

issparse

mustBeNumeric(A)

A является числовым.

isnumeric

mustBeNumericOrLogical(A)

A является числовым или логическим.

isnumeric, islogical

mustBeReal(A)

A не имеет никакой мнимой части.

isreal

mustBeInteger(A)

A==floor(A)

isreal, isfinite, floor, isnumeric, islogical

mustBeMember(A,B)

A является точным совпадением для члена B.

ismember

Определение функций валидации

Функциями блока проверки допустимости являются обычные функции MATLAB, которые разработаны для определенной цели подтвердить значения свойств. Функции используются в качестве блоков проверки допустимости свойства:

  • Примите потенциальное значение свойства как входной параметр

  • Не делайте возвращаемых значений

  • Выдайте ошибки, если валидация перестала работать

Создание вашей собственной функции валидации полезно когда это необходимо, чтобы обеспечить определенную валидацию, которая не является доступным использованием функций валидации MATLAB. Можно создать локальные функции в файле класса или поместить функцию в путь MATLAB, чтобы быть доступными для использования в любом классе.

Например, класс ImData использует локальную функцию, чтобы задать блок проверки допустимости, который ограничивает свойство Data определенной областью значений числовых значений.

classdef ImData
   properties
      Data {mustBeNumeric, mustBeInRange(Data,[0,255])} = 0
   end
end
function mustBeInRange(a,b)
   if any(a(:) < b(1)) || any(a(:) > b(2))
      error(['Value assigned to Data property is not in range ',...
         num2str(b(1)),'...',num2str(b(2))])
   end
end

Когда вы создаете экземпляр класса ImData, MATLAB подтверждает это, значение по умолчанию является числовым, в области значений 0...255, и не пустым.

a = ImData
a = 

  ImData with properties:

    Data: 0

Присвоение свойства вызывает блоки проверки допустимости в слева направо порядке. Присвоение вектора char к свойству Data вызывает ошибку, выданную mustBeNumeric.

a.Data = 'red'
Error setting property 'Data' of class 'ImData':
Value must be numeric.

Присвоение числового значения, которое является вне области значений, вызывает ошибку, выданную mustBeInRange.

a.Data = -1
Error setting property 'Data' of class 'ImData':
Value assigned to Data property is not in range 0...255

Добавление поддержки функций валидации

Поддерживайте функции валидации MATLAB для объектов вашего класса путем реализации зависимых функций как методов класса. Чтобы определить который методы реализовать для каждой функции, смотрите страницы ссылки на функцию валидации, перечисленные в этой таблице MATLAB Validation Functions.

Например, предположите, что вы хотите, чтобы ваш класс поддерживал функцию валидации mustBeGreaterThan. Перегрузите эти функции MATLAB как методы в вашем классе:

  • isreal Всегда возвращайте логический true, потому что mustBeGreaterThan не поддерживает комплексные числа.

  • &gt Второй объект в сравнении должен быть скаляром, как требуется mustBeGreaterThan.

Класс SupportmBGT реализует поддержку mustBeGreaterThan.

classdef SupportmBGT
   properties
      Prop(1,1) double {mustBeReal}
   end
   methods
      function obj = SupportmBGT(data)
         if nargin > 0
            obj.Prop = data;
         end
      end
      function tf = isreal(obj)
         tf = true;
      end
      function tf = gt(obj1, obj2)
         tf = [obj1(:).Prop] > obj2.Prop;
      end
   end
end

Используйте mustBeGreaterThan с объектами этого класса:

a = SupportmBGT(10);
b = SupportmBGT(12);
mustBeGreaterThan(a,b)
Error using mustBeGreaterThan (line 19)
Value must be greater than the comparison value.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте