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

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

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

Атрибуты числового значения

Имя

Значение

Функции, вызываемые на входах

mustBePositive(значение)

value > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(значение)

value <= 0

ge, isreal, isnumeric, islogical

mustBeNonnegative(значение)

value >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(значение)

value < 0

lt, isreal, isnumeric, islogical

mustBeFinite(значение)

value не имеет NaN и нет Inf элементы.

isfinite

mustBeNonNan(значение)

value не имеет NaN элементы.

isnan

mustBeNonzero(значение)

value ~= 0

eq, isnumeric, islogical

mustBeNonsparse(значение)

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

issparse

mustBeReal(значение)

value не имеет мнимой части.

isreal

mustBeInteger(значение)

value == floor(value)

isreal, isfinite, floor, isnumeric, islogical

mustBeNonmissing(значение)

value не может содержать отсутствующие значения.

ismissing

Сравнение с другими значениями

Имя

Значение

Функции, вызываемые на входах

mustBeGreaterThan(значение, c)

value > c

gt, isscalar, isreal, isnumeric, islogical

mustBeLessThan(значение, c)

value < c

lt, isreal, isnumeric, islogical

mustBeGreaterThanOrEqual(значение, c)

value >= c

ge, isreal, isnumeric, islogical

mustBeLessThanOrEqual(значение, c)

value <= c

le, isreal, isnumeric, islogical

Типы данных

Имя

Значение

Функции, вызываемые на входах

mustBeA(значение, имена классов)

value должен иметь определенный класс.

Использует отношения определения класса

mustBeNumeric(значение)

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

isnumeric

mustBeNumericOrLogical(значение)

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

isnumeric, islogical

mustBeFloat(значение)

value должен быть массивом с плавающей точкой.

isfloat

mustBeUnderlyingType(значение, typename)

value должен иметь указанный базовый тип.

isUnderlyingType

Размер

Имя

Значение

Функции, вызываемые на входах

mustBeNonempty(значение)

value не пуст.

isempty

mustBeScalarOrEmpty(значение)value должен быть скаляром или пустым.

isscalar, isempty

mustBeVector(значение)value должен быть вектором.

isvector

Членство и область значений

Имя

Значение

Функции, вызываемые на входах

mustBeMember(значение, S)

value является точным совпадением для представителя S.

ismember

mustBeInRange(значение, нижний, верхний, граничные флаги)value должно находиться в пределах области значений.

gt, ge, lt, le

Текст

Имя

Значение

Функции, вызываемые на входах

mustBeFile(путь)

path должен ссылаться на файл.

isfile

mustBeFolder(папка)path должна ссылаться на папку.

isfolder

mustBeNonzeroLengthText(значение)

value должен быть фрагментом текста ненулевой длины.

Не применяется

mustBeText(значение)

value должен быть строковыми массивами, вектором символов или массивом ячеек векторов символов.

Не применяется

mustBeTextScalar(значение)

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

Не применяется
mustBeValidVariableName(varname)varname должно быть допустимым именем переменной.

isvarname

Проверьте свойство с помощью функций

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

В процессе валидации 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 свойство для задания класса следующим doubleMATLAB преобразует 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

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

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

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

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

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

Например, предположим, что вы задаете 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, который будет доступен для использования в любом классе.

Для примера, ImgData класс использует локальную функцию, чтобы задать валидатор, который ограничивает Data свойство только для uint8 или uint16 значения, исключающие подклассы и не допускающие преобразования из других числовых классов. Предопределенная функция валидации mustBeInRange ограничивает область значений допустимых значений.

classdef ImgData
    properties
        Data {mustBeImData(Data), mustBeInRange(Data,0,255)} = uint8(0)
    end
end
function mustBeImData(a)
    % Check for specific class     
    if ~(strcmp(cname, 'uint8') || strcmp(cname, 'uint16'))
        eidType = 'ImData:notUint8OrUint16';
        msgType = 'Value assigned to Data property is not uint8 or uint16 data.';
        throwAsCaller(MException(eidType,msgType))
    end
end

Когда вы создаете образец ImgData класс, MATLAB проверяет, что значение по умолчанию является uint8 или uint16 значение, в области значений 0...255, и не пустой. Обратите внимание, что значение по умолчанию должно удовлетворять требованиям валидации, как и любое другое значение, назначенное свойству.

a = ImgData
a = 

  ImgData with properties:

    Data: 0

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

a.Data = 'red';
Error setting property 'Data' of class 'ImgData'. Value assigned to
Data property is not uint8 or uint16 data.

Назначение числового значения, которое находится вне области значений, приводит к ошибке, выданной mustBeInRange.

a.Data = uint16(312);
Error setting property 'Data' of class 'ImgData'. Value must be greater
than or equal to 0, and less than or equal to 255.

Для связанных функций смотрите mustBeInteger, mustBeNumeric, и mustBePositive.

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

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

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

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

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

The 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.

Похожие темы