エディターでの変数スコープのチェック
スコープの問題は、一部のコードの問題の原因となります。たとえば、入れ子関数がある変数を共有していることを知らないと、コードを実行した際、予期しない結果になります。同様に、ローカル、グローバルおよび永続変数の誤用によっても予期しない結果が発生します。
関数間の変数の共有はエラーではなく、意図的であることもあるため、コード アナライザーがスコープの問題を特定できないことがあります。MATLAB® 関数と変数の強調表示機能を使用して、コードでの関数と変数の使用箇所と条件を特定します。インターネット接続がアクティブな場合、Variable and Function Highlighting video で、主要な機能の概要を見ることができます。
入れ子関数の概念情報と MATLAB 変数の各種タイプについては、親関数と入れ子関数間での変数の共有とワークスペース間でのデータの共有を参照してください。
関数と変数の自動強調表示の使用
既定の設定では、エディターは、関数、ローカル変数および共有スコープをもつ変数を、いくつかの青系色で表示します。共有スコープをもつ変数にはグローバル変数、永続変数、および入れ子関数内の変数があります。(詳細は、入れ子関数を参照)。
強調表示の有効化と無効化、または表示の色の変更を行うには、[基本設定] をクリックして、[MATLAB] 、 [色] 、 [プログラミング ツール] を選択します。MATLAB Online™ では、強調表示は既定で有効になっていて、強調表示の基本設定を変更することはできません。
既定の設定では、エディターには以下のように表示されます。
カーソルを関数名または変数名の上に置くと、その関数またはローカル変数のすべてのインスタンスが水色で強調表示されます。次に例を示します。
カーソルの位置にかかわらず、共有スコープをもつ変数はティール ブルー (薄い青色) で表示されます。次に例を示します。
関数と変数の自動強調表示の使用例
関数 rowsum
のコードを考えます。
function rowTotals = rowsum % Add the values in each row and % store them in a new array x = ones(2,10); [n, m] = size(x); rowTotals = zeros(1,n); for i = 1:n rowTotals(i) = addToSum; end function colsum = addToSum colsum = 0; thisrow = x(i,:); for i = 1:m colsum = colsum + thisrow(i); end end end
このコードを実行すると、各行で値の合計を返すのではなく、以下のように表示されます。
ans = 10 10
MATLAB には以下のように表示されます。
ans = 0 0 0 0 0 0 0 0 0 10
以下の手順に従って、コードを確認します。
[ホーム] タブの [環境] セクションで
[基本設定] をクリックして、[MATLAB] 、 [色] 、 [プログラミング ツール] を選択します。[自動的に強調] および [共有スコープをもつ変数] が選択されていることを確認します。
rowsum
コードをエディターにコピーします。変数
がティール ブルー (薄い青色) で表示され、
i
がローカル変数ではないことを示します。関数rowTotals
と関数addToSum
はどちらも、変数i
を設定し、使用します。6 行目の変数
n
は黒で表示され、複数の関数にまたがっていないことを示します。マウス ポインターを変数
i
のインスタンスの上に置きます。ツールヒントが表示されます。変数 'i' のスコープは、複数の関数にまたがります。
スコープが複数の関数にまたがっている変数の情報のツールヒント リンクをクリックします。
i
のインスタンスをクリックします。i
へのリファレンスはすべて水色で強調表示され、エディターの右側のインジケーター バーにマーカーが表示されます。インジケーター バー マーカーの 1 つの上にマウスを置きます。
ツールヒントが表示され、関数または変数の名前と、マーカーが示すコード行が表示されます。
マーカーをクリックして、そのマーカーのツールヒントに示される行に移動します。
これは、ファイルにエディターで一度に表示しきれない量のコードがある場合に便利です。
15 行目の i
のインスタンスを y
に変更して、コードを修正します。
関数リファレンスをクリックしても、同様の強調表示の効果を表示できます。たとえば、addToSum
をクリックします。