exponenta event banner

Предупреждения анализатора кода MATLAB

Синтаксические предупреждения и имена свойств

Анализатор кода MATLAB ® помогает оптимизировать код и избежать синтаксических ошибок при написании кода. Полезно понимать некоторые правила, применяемые анализатором кода при анализе кода определения класса. Такое понимание помогает избежать ситуаций, когда MATLAB допускает нежелательный код.

Предупреждения о конфликте имени переменной/свойства

Анализатор кода предупреждает об использовании имен переменных в методах, соответствующих именам свойств. Например, предположим, что класс определяет свойство с именем EmployeeName и в этом классе существует метод, который использует EmployeeName в качестве переменной:

properties
   EmployeeName
end
methods
   function someMethod(obj,n)
      EmployeeName = n;
   end
end

В то время как предыдущая функция является легальным кодом MATLAB, она приводит к предупреждениям анализатора кода по двум причинам:

  • Значение EmployeeName никогда не используется

  • EmployeeName - имя свойства, используемого в качестве переменной;

Если функция someMethod вместо этого содержалось следующее утверждение:

obj.EmployeeName = n;

Анализатор кода не генерирует предупреждений.

При изменении someMethod кому:

function EN = someMethod(obj)
   EN = EmployeeName;
end

Анализатор кода возвращает только одно предупреждение, предполагающее, что вы действительно хотите обратиться к EmployeeName собственность.

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

EN = obj.EmployeeName;

Исключение для правила имени переменной/свойства

Предположим, что определен метод, который возвращает значение свойства и использует имя свойства для имени выходной переменной. Например:

function EmployeeName = someMethod(obj)
   EmployeeName = obj.EmployeeName;
end

Анализатор кода не предупреждает, если имя переменной совпадает с именем свойства, если переменная:

  • Входная или выходная переменная

  • Глобальная или постоянная переменная

В этих конкретных случаях анализатор кода не предупреждает, что используется имя переменной, которое также является именем свойства. Следовательно, ошибка кодирования, такая как:

function EmployeeName = someMethod(obj)
   EmployeeName = EmployeeName; % Forgot to include obj.
end

не запускает предупреждение от анализатора кода.

Связанные темы