checkcode
MATLAB のコード ファイルの潜在的な問題のチェック
構文
説明
メモ
R2022b において: codeIssues
は、対話機能が向上していて、特定された問題を保存する機能を備えているため、checkcode
よりも推奨されます。
checkcode(
は、filename
)filename
について、潜在的な問題とコード改良の余地を報告するメッセージを表示します。これらのメッセージは、「コード アナライザー メッセージ」と呼ばれることがあります。メッセージの行番号はハイパーリンクです。クリックするとエディターでその行に直接移動できます。checkcode
メッセージの正確なテキストは、バージョンにより若干異なる場合があります。
例
ファイル内の潜在的な問題のチェック
サンプル ファイル lengthofline.m
に対して checkcode
を実行します。MATLAB® は lengthofline.m
に関するコード アナライザー メッセージをコマンド ウィンドウに表示します。
checkcode('lengthofline')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable 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): Variable 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 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable 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): Add a semicolon after the statement to hide the output (in a function).
潜在的な問題のリストの格納
サンプル ファイル lengthofline.m
に対して checkcode
を実行します。メッセージ ID を含めて、結果を構造体に格納します。
info = checkcode('lengthofline', '-id')
info=16×1 struct array with fields:
id
message
fix
line
column
最初のメッセージの値を表示します。
info(1)
ans = struct with fields:
id: 'NASGU'
message: 'Value assigned to variable might be unused.'
fix: 0
line: 21
column: [1 9]
ファイルの変更された循環的複雑度の表示
'-modcyc'
オプションを使用して、例のファイル lengthofline.m
に対して checkcode
を実行します。MATLAB® は lengthofline.m
に関するファイルの変更された循環的複雑度とコード アナライザー メッセージを表示します。
checkcode('lengthofline', '-modcyc')
L 1 (C 23-34): The modified cyclomatic complexity of 'lengthofline' is 12. L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable 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): Variable 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 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable 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): Add a semicolon after the statement to hide the output (in a function).
コード アナライザー メッセージを非表示にする
設定ファイルを作成して指定することで、特定のメッセージを非表示にします。たとえば、ファイル lengthofline.m
には OR
演算子として || の代わりに | を使用する行がいくつか含まれています。既定で、checkcode
はこれらの行にフラグを設定します。
checkcode('lengthofline')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable 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): Variable 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 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable 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): Add a semicolon after the statement to hide the output (in a function).
OR
演算子として | が使用されていることを示すメッセージを非表示にする設定ファイルを作成します。
[ホーム] タブの [環境] セクションで [基本設定] ボタンをクリックします。
左のペインで [コード アナライザー] を選択します。
[既定の設定] の下の [外観と可読性] セクションで、[(スカラーの) 条件文の OR 演算子として | の代わりに || を使用してください。] というメッセージをオフにします。
ファイル名として
mysettings.txt
を入力し、現在のフォルダーに保存します。[キャンセル] ボタンをクリックして、アクティブな設定を変更せずに [基本設定] パネルを閉じます。
カスタム設定ファイル mysettings.txt
を使用して、サンプル ファイルに対して checkcode
を実行します。メッセージ「 (スカラーの) 条件文の OR 演算子として | の代わりに || を使用してください。」は抑制され、それ以降、メッセージのリストに表示されなくなります。
checkcode('lengthofline','-config=mysettings.txt')
L 21 (C 1-9): Value assigned to variable might be unused. L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 23 (C 5-11): Variable 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): Variable 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 38 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 39 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 40 (C 17-45): To improve performance, use 'isscalar' instead of length comparison. L 42 (C 13-15): Variable appears to change size on every loop iteration. Consider preallocating for speed. L 44 (C 13-15): Variable 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): Add a semicolon after the statement to hide the output (in a function).
入力引数
filename
— ファイル名
文字ベクトル | string 配列 | 文字ベクトルの cell 配列
ファイル名。文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ファイル名には部分パスを含めることができますが、検索パス上のフォルダーまたは現在のフォルダー内になければなりません。
filename
が非スカラーの string 配列または文字ベクトルの cell 配列である場合、MATLAB® は各ファイルの情報を表示します。
メモ
ファイル名の cell 配列と文字配列を連結することはできません。たとえば、入力として {'lengthofline', 'buggy'}, 'collatz'
を指定することはできません。
例: 'lengthofline'
例: {'lengthofline', 'buggy'}
データ型: char
| string
option
— 表示オプション
'-id'
| '-fullpath'
| '-notok'
| '-cyc'
| '-modcyc'
| '-config'
表示オプション。次の値のいずれかとして指定します。オプションの順番は任意です。
オプション | 説明 |
---|---|
'-id' | メッセージ ID を要求します。ここで ID は文字ベクトルです。構造体へ返した場合、出力は id フィールドももちます。これは、メッセージに付属した ID です。 |
'-fullpath' | 入力されたファイル名が絶対パスであると仮定します。したがって checkcode はファイルの位置特定を試行しません。 |
'-notok' |
|
'-cyc' | ファイル内にある各関数の McCabe の循環的複雑度を表示します。一般に、複雑度の値が低いほど、プログラムは理解しやすく変更も容易です。複雑度の値が高いほど、プログラムにエラーが含まれる可能性が高いことは証拠により示唆されています。関数の複雑度を下げるには、より小さくて単純な関数に分割します。複雑度の値が 10 を超える場合、プログラムの分割が推奨されることもあります。 循環的複雑度の詳細については、循環的複雑度を使用したコードの複雑度の測定を参照してください。 |
'-modcyc' | ファイル内にある各関数の変更された循環的複雑度を表示します。関数の変更された循環的複雑度は、McCabe の循環的複雑度と等しくなりますが、1 つの違いがあります。McCabe の循環的複雑度では、 循環的複雑度の詳細については、循環的複雑度を使用したコードの複雑度の測定を参照してください。 |
| 指定した設定ファイルで既定のアクティブな設定ファイルをオーバーライドします。指定したファイルが現在のフォルダーにない場合は、ファイルへの絶対パスを指定します。 設定ファイル作成の詳細については、コード アナライザー メッセージ設定の保存と再利用を参照してください。無効なファイルが指定された場合、関数 設定ファイルをすべて無視して、出荷時の既定の基本設定を使用するには、 |
出力引数
info
— メッセージの情報
構造体配列 | cell 配列
メッセージの情報。n
行 1
列の構造体配列として返されます。ここで、n
は checkcode
コマンドで返されるメッセージの数です。複数のファイル名が入力された場合、あるいは cell 配列が入力された場合、info
は構造体の cell 配列を含みます。
フィールド | 説明 |
---|---|
| コード解析が検出した問題がありそうな構造を説明するメッセージ。 |
| 行番号のベクトル。ファイル内でメッセージが適用される行を示します。 |
| 列番号からなる 2 列配列 (列の範囲)。ファイル内でメッセージが適用される列を示します。配列の最初の列は、メッセージが開始されるエディターの列を指定します。配列の 2 番目の列は、メッセージが終了するエディターの列を指定します。2 列配列内で、メッセージの各出現箇所につき 1 行が使用されます。 |
msg
— メッセージの情報
文字ベクトル
メッセージの情報。文字ベクトルとして返されます。複数のファイル名が入力された場合、あるいは cell 配列が入力された場合、msg
は文字ベクトルを含み、各ファイルの情報は 10 個の等号文字、1 つのスペース、ファイル名、1 つのスペースおよび 10 個の等号文字で区切られます。
例: ========== C:\MyMatlabFiles\buggy.m ==========
filepaths
— ファイルの絶対パス
文字ベクトルの cell 配列
ファイルの絶対パス。文字ベクトルの cell 配列として指定します。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
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2011b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)