Проверьте файлы кода MATLAB на возможные проблемы
checkcode(
отображает сообщения о filename
)filename
которые сообщают о потенциальных проблемах и возможностях для улучшения кода. Эти сообщения иногда называются сообщениями анализатора кода. Номер линии в сообщении является гиперссылкой, которую можно кликнуть, чтобы перейти непосредственно к этой линии в редакторе. Точный текст checkcode
сообщения могут быть изменены между версиями.
возвращает информацию как info
= checkcode(___,'-struct')n
-by- 1
массив структур, где n
количество найденных сообщений.
возвращает информацию в виде вектора символов.msg
= checkcode(___,'-string')
Если вы опускаете '-struct'
или '-string'
аргумент и вы задаете выходной аргумент, поведение по умолчанию '-struct'
.
[___,
также возвращается filepaths
]
= checkcode(___)filepaths
, абсолютные пути к именам файлов. Можно задать filepaths
с любым из '-struct'
или '-string'
опции.
Выполняйте checkcode
на примере файла lengthofline.m
. MATLAB ® отображает сообщения анализатора кода для lengthofline.m
в Командном окне.
checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance. L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].
Выполняйте checkcode
на примере файла lengthofline.m
. Включите идентификаторы сообщений и сохраните результаты в структуре.
info = checkcode('lengthofline', '-id')
info=17×1 struct array with fields:
id
message
fix
line
column
Просмотрите значения для первого сообщения
info(1)
ans = struct with fields:
id: 'NASGU'
message: 'The value assigned to variable 'nothandle' might be unused.'
fix: 0
line: 21
column: [1 9]
Выполняйте checkcode
на примере файла lengthofline.m
использование '-modcyc'
опция. MATLAB ® отображает измененную цикломатическую сложность файла, а затем сообщения анализатора кода для lengthofline.m
.
checkcode('lengthofline', '-modcyc')
L 1 (C 23-34): The modified cyclomatic complexity of 'lengthofline' is 12. L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance. L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].
Подавить определенные сообщения можно путем создания и определения файла настроек. Для примера файл lengthofline.m
включает несколько линий, которые используют | вместо || в качестве OR
оператор. По умолчанию checkcode
флаги этих линий.
checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance. L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance. L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].
Создайте файл настроек, который подавляет сообщение, помечающее использование | в качестве OR
оператор.
На вкладке «Вкладке Home», в разделе Environment, нажмите кнопку Preferences.
Выберите Анализатор кода на левой панели.
В разделе Настройки по умолчанию в разделе Эстетика и читаемость очистите сообщение Использовать вместо | как оператор OR в (скалярных) условных операторах.
Введите mysettings.txt
как имя файла и сохранить его в текущей папке.
Нажмите кнопку «Отмена», чтобы выйти из панели выборов без изменения активных настроек.
Выполняйте checkcode
в файле примера с использованием пользовательского файла настроек mysettings.txt
. Сообщение Use вместо | в качестве оператора OR в (скалярных) условных операторах подавлено и больше не отображается в списке сообщений.
checkcode('lengthofline','-config=mysettings.txt')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed. L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed. L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed. L 47 (C 21): A '[' might be missing a closing ']', causing invalid syntax at ')'. L 47 (C 51): A '(' might be missing a closing ')', causing invalid syntax at ';'. L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax. L 48 (C 17): Terminate statement with semicolon to suppress output (in functions). L 48 (C 23): If you intend to specify expression precedence, use parentheses () instead of brackets [].
filename
- Имя файлаИмя файла, заданное как вектор символов, строковые массивы или массив ячеек из векторов символов. Имя файла может включать частичный путь, но должно находиться в папке в пути поиска файлов или в текущей папке.
Если filename
- нескалярные строковые массивы или массив ячеек из векторов символов, MATLAB® отображает информацию для каждого файла.
Примечание
Вы не можете объединить массивы ячеек и символьные массивы имен файлов. Для примера вы не можете иметь {'lengthofline', 'buggy'}, 'collatz'
как вход.
Пример: 'lengthofline'
Пример: {'lengthofline', 'buggy'}
Типы данных: char
| string
option
- Параметр отображения'-id'
| '-fullpath'
| '-notok'
| '-cyc'
| '-modcyc'
| '-config'
Параметр отображения, заданное как одно из следующих значений. Опции могут появиться в любом порядке.
Опция | Описание |
---|---|
'-id' | Запросите идентификатор сообщения, где идентификатор является вектором символов. При возвращении в структуру выход также имеет id поле, которое является идентификатором, связанным с сообщением. |
'-fullpath' | Предположим, что имена входных файлов являются абсолютными путями, так что checkcode не пытается найти их. |
'-notok' | Выполняйте Для получения информации о |
'-cyc' | Отобразите цикломатическую сложность McCabe каждой функции в файле. В целом более низкие значения сложности указывают на программы, которые легче понять и изменить. Данные свидетельствуют о том, что программы с более высокими значениями сложности с большей вероятностью содержат ошибки. Часто можно снизить сложность функции, разделив её на меньшие, более простые функции. Некоторые люди выступают за разделение программ, которые имеют значение сложности более 10. |
'-modcyc' | Отображает измененную цикломатическую сложность каждой функции в файле. Модифицированная цикломатическая сложность для функции равна цикломатической сложности Маккейба, за исключением одного различия. Цикломатическая сложность Маккейба отсчитывает каждого индивидуума case в пределах switch оператор как 1, в то время как измененная цикломатическая сложность отсчитывает все switch оператор как 1. В целом, switch операторы проще вложенных if-elseif-else операторы и, следовательно, модифицированная цикломатическая сложность часто рассматривается как лучшая мера сложности кода. |
| Переопределите файл активных настроек по умолчанию указанным файлом настроек. Если указанный файл отсутствует в текущей папке, укажите полный путь к файлу. Дополнительные сведения о создании файла настроек см. в разделе Сохранение и повторное использование параметров сообщения анализатора кода. Если вы задаете недопустимый файл, Чтобы игнорировать все файлы настроек и использовать заводские настройки выборов по умолчанию, задайте |
info
- Информация о сообщенииИнформация о сообщении, возвращенная как n
-by- 1
массив структур, где n
- количество сообщений, возвращаемых checkcode
команда. Если вы задаете несколько имен файлов в качестве входных, или если вы задаете массив ячеек в качестве входных, info
содержит массив ячеек структур.
Область | Описание |
---|---|
| Сообщение, описывающее подозрительную конструкцию, которую поймал анализ кода. |
| Вектор номеров линии, указывающий, к каким линиям файла применяется сообщение. |
| Двухколоночный массив номеров столбцов (экстенты столбцов), указывающий, к каким столбцам файла применяется сообщение. Первый столбец массива задает столбец в редакторе, с которого начинается сообщение. Второй столбец массива задает столбец в редакторе, где заканчивается сообщение. В массиве с двумя столбцами каждое вхождение сообщения имеет строку. |
msg
- Информация о сообщенииИнформация о сообщении, возвращенная как вектор символов. Если вы задаете несколько имен файлов в качестве входных, или если вы задаете массив ячеек в качестве входных, msg
содержит вектор символов, где информация для каждого файла разделена 10 знаками равного знака, пространством, именем файла, пространства и 10 знаками равного знака.
Пример: ========== C:\MyMatlabFiles\buggy.m ==========
filepaths
- Абсолютные пути к файламАбсолютные пути к файлам, заданные как массив ячеек из векторов символов. MATLAB перечисляет filepaths
в том же порядке, что и указанные входные файлы.
Чтобы заставить анализатор кода игнорировать строку кода, используйте %#ok
в конце линии. Можно добавлять комментарии после тега.
unsuppressed1 = 10 % This line will get caught suppressed2 = 20 %#ok This line will not get caught suppressed3 = 30 %#ok This line will not get caught
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.