Проверяйте файлы кода MATLAB на возможные проблемы
checkcode(
отображения обмениваются сообщениями о filename
)filename
тот отчет потенциальные проблемы и возможности для улучшения кода. Эти сообщения иногда упоминаются, когда Анализатор кода обменивается сообщениями. Номер строки в сообщении является гиперссылкой, по которой можно кликнуть, чтобы перейти непосредственно к той линии в Редакторе. Точный текст checkcode
сообщения подвергаются некоторому изменению между версиями.
возвращает информацию как info
= checkcode(___,'-struct')n
- 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.
Выберите Code Analyzer на левой панели.
При Настройках по умолчанию, в разделе Aesthetics и Readability, очищают Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах.
Введите mysettings.txt
как имя файла и сохраняют его в вашу текущую папку.
Нажмите Кнопку отмены, чтобы выйти из панели настройки, не изменяя активные настройки.
Запустите checkcode
на файле в качестве примера с помощью пользовательского файла настроек mysettings.txt
. Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах подавлено и больше не отображается в списке сообщений.
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 Имя файла в виде вектора символов, массива строк или массива ячеек из символьных векторов. Имя файла может включать частичный путь, но должно быть в папке на пути поиска файлов или в текущей папке.
Если filename
нескалярный массив строк или массив ячеек из символьных векторов, MATLAB® информация об отображениях для каждого файла.
Примечание
Вы не можете объединить массивы ячеек и символьные массивы имен файлов. Например, у вас не может быть {'lengthofline', 'buggy'}, 'collatz'
как вход.
Пример: 'lengthofline'
Пример: {'lengthofline', 'buggy'}
Типы данных: char |
string
option
— Параметр отображения'-id'
| '-fullpath'
| '-notok'
| '-cyc'
| '-modcyc'
| '-config'
Параметр отображения в виде одного из этих значений. Опции могут появиться в любом порядке.
Опция | Описание |
---|---|
'-id' | Запросите идентификатор сообщения, где ID является вектором символов. Когда возвращено в структуру, выход также имеет id поле, которое является ID, сопоставленным с сообщением. |
'-fullpath' | Примите, что входные имена файлов являются абсолютными путями, так, чтобы checkcode не пытается определить местоположение их. |
'-notok' | Запустите Для получения информации о |
'-cyc' | Отобразите Маккейба цикломатическая сложность каждой функции в файле. В общем случае более низкие значения сложности указывают на программы, которые легче изучить и изменить. Данные свидетельствуют, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. Некоторые люди защищают разделять программы, которые имеют значение сложности более чем 10. |
'-modcyc' | Отображает модифицированную цикломатическую сложность каждой функции в файле. Модифицированная цикломатическая сложность для функции равна Маккейбу цикломатическая сложность за исключением одного различия. Маккейб цикломатическая сложность считает каждого индивидуума case в a switch оператор как 1, в то время как изменено цикломатическая сложность считает целое switch оператор как 1. В общем случае switch операторы более просты, чем вложенный if-elseif-else операторы и поэтому, модифицированная цикломатическая сложность часто рассматривается лучшей мерой сложности кода. |
| Замените активный файл настроек по умолчанию с заданным файлом настроек. Если заданный файл не находится в текущей папке, предоставьте полный путь файлу. Для получения информации о создании файла настроек смотрите, Сохраняют настройки сообщения анализатора кода и использовать их снова. Если вы задаете недопустимый файл, Чтобы проигнорировать все файлы настроек и использовать настройки настройки заводской настройки, задайте |
info
— Передайте информациюПередайте информацию, возвращенную как n
- 1
массив структур, где n
количество сообщений, возвращенных checkcode
команда. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, info
содержит массив ячеек структур.
Поле | Описание |
---|---|
| Сообщение, описывающее подозрительное построение тот анализ кода, отловлено. |
| Вектор из номеров строки, указывая, к которому применяются строки файла сообщение. |
| Массив 2D столбца чисел столбцов (степени столбца), указывая, к которому применяются столбцы файла сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. В массиве 2D столбца ссорится каждое вхождение сообщения. |
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
backgroundPool
или ускорьте код с Parallel Computing Toolbox™ ThreadPool
.Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.