グローバル変数とローカル変数の違いとは?

グローバル変数とローカル変数の違いとは? MQL4基礎

MQL4言語でプログラミングをする際、「グローバル変数」と「ローカル変数」の使い分けは非常に重要です。これらの変数は、スクリプトやエキスパートアドバイザー(EA)の動作に直接影響を与えます。ここでは、それぞれの特徴と適切な使い方について解説します。

なお、本ページでの「グローバル変数」はプログラム内で宣言するグローバル変数のことです。詳しくはこちらを参考にしてください。

グローバル変数

グローバル変数は、プログラム全体で使用できる変数です。スクリプトや関数のどこからでもアクセス可能で、プログラムが終了するまで値を保持します。宣言は通常、プログラムの冒頭や関数の外で行ないます。

使用上の利点

  • プログラム全体で一貫した値を保持できるため、設定値やカウンターとして利用されることが多い。
  • どの関数からもアクセス可能なため、データの共有が簡単にできる。

使用上の欠点

  • 不要な変更や誤操作によるバグが発生しやすい。
  • 複数の関数が同時に値を変更する場合、予期せぬ動作を引き起こす可能性がある。

ローカル変数

ローカル変数は、その変数が宣言された関数やブロック内でのみ有効な変数です。関数が終了すると、その変数は破棄され、再度同じ関数が呼び出された際には新しい値が設定されます。

使用上の利点

  • 他の関数やブロックからの影響を受けないため、変数の管理が容易。
  • メモリ効率が良く、必要な時だけ変数を使用できる。

使用上の欠点

  • 特定の関数やブロック内でしか使えないため、データの共有が困難。

使用例

グローバル変数とローカル変数を使ったプログラム例です。

グローバル変数「gv」を、作成した関数「lv_function()」の中で変化させています。「gv」は作成関数の外に出ても変化した値が維持されます。

ローカル変数「lv」は作成した関数「OnInit()」と「lv_function()」の中でそれぞれ宣言して値を変化させています。それぞれ「lv」は作成した関数の中でしか宣言されていないので、作成した関数の外で使うことができません。
それぞれの「lv」はそれぞれの関数の中でしか使うことができないので、別々の「lv」と考えてください。

コード

// 複数の値を返す参照渡しの方法
#property strict

int gv = 0;                 // 「gv」はグローバル変数

void OnInit() {

int lv = 1;                 // 「lv」はOnInit()関数内のローカル変数

Print("①lv_function()関数の結果:", lv_function());

Print("②グローバル変数 gv:", gv);

Print("③lv_function()関数の結果:", lv_function());

Print("④OnInit()関数内のローカル変数 lv:", lv);
}


int lv_function() {

   int lv = 0;              // 「lv」はlv_function()関数内のローカル変数
   
   for(int i=0; i<10; i++){ // 「i」もlv_function()関数内のローカル変数
      gv++;                 // 「gv」はグローバル変数
      lv = lv + gv;
   }
   
   Print("⑤lv_function()関数の中のローカル変数 lv:", lv);
   return(lv);
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

作成関数「lv_function()」の中で、グローバル変数「gv(=0)」に順次 1が足され、1~10に変化した「gv」をそれぞれ合計して、ローカル変数「lv」が「55」になります。

作成関数「lv_function()」は「55」を返します。

この時「gv」は①で「10」になっています。

作成関数「lv_function()」の中で、グローバル変数「gv(=10)」に順次 1が足され、11~20に変化した「gv」をそれぞれ合計して、ローカル変数「lv」が「155」になります。

作成関数「lv_function()」は「155」を返します。

「OnInit()」関数内のローカル変数「lv」は変更されていないので「1」のままです。
作成関数「lv_function()」中のローカル変数「lv」とは無関係の変数になります。

適切な使い分け

プログラミングにおいて、グローバル変数とローカル変数を適切に使い分けることは、コードの保守性やパフォーマンスを向上させる鍵です。次の点に注意して使い分けましょう。

共有データにはグローバル変数

 複数の関数で共有する必要があるデータには、グローバル変数を使います。例としては、全体で使用する設定値やトレードカウンターなどが該当します。

限定的な使用にはローカル変数

 特定の処理や関数内でのみ必要なデータには、ローカル変数を使いましょう。これにより、意図しない変更を防ぐことができます。

まとめ

  • グローバル変数は、プログラム全体で使われる変数で、どこからでもアクセス可能。
  • ローカル変数は、特定の関数やブロック内でのみ有効で、処理が終了すると破棄される。
  • 適切な使い分けにより、コードの安定性と効率性が向上する。

これら基本を理解することで、MQL4プログラムの品質を高め、効率的なコーディングが可能になります。

タイトルとURLをコピーしました