MQL4で変数の命名規則って必要なの!

セレブパンダのことを、セフレパンダと呼ばれて、改名しようか3日間悩んだセレブパンダだお。

インジケーターやEAの開発するにあたり、仲間で完成させることがあります。
そんな時に、各人が好き勝手に変数を決めていたりすると以下のことが起こります。

変数の重複。
思わぬ誤動作をします。

それを回避するために、セレブパンダは変数にも接頭語などを決めてルール化しております。

変数が重複する例

変数が重複して、コンパイルでは警告が発生する例を書きますね。

//+------------------------------------------------------------------+
//|                                                      サンプル.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "Copyright CelebPanda"
#property version   "1.00"
#property strict
#property indicator_chart_window

// グローバル変数の宣言
int a = 3;


int start(){
    int a = 5;
    a += 7;
    Print("a=",a);
}

これは、グローバル変数:aとローカル変数:aで名前が重複してしまうケースです。
短いコードは、判別できますが、長いコードになると困ったものになります。

これは極端な例ですが、こういうことが複数人で開発を進めていると発生します。
ある機能のソースをAさんからもらい、それをBさんが組み込む。
なんてケースです。

これを回避するのが命名規則です。

セレブパンダは、グローバル変数はグローバル(global)のgを頭につけています。
先頭につけることを接頭語と呼んでます。

この例ではgAとします。gの次は大文字にし、区別しやすくしています。

セレブパンダ風に書き直してみます。

//+------------------------------------------------------------------+
//|                                                      サンプル.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "Copyright CelebPanda"
#property version   "1.00"
#property strict
#property indicator_chart_window

// グローバル変数の宣言
int gA = 3;


int start(){
    int a = 5;
    a += 7;
    Print("a=",a);
}

セレブパンダ風命名規則

  • グローバル変数

グローバル変数はアッパーキャメルケースで記述する。ただし、先頭にグローバル変数であることを示すために英小文字のgを付ける。
int  gTodayStartShift;

  • ローカル変数

ローカル変数はローワーキャメルケースで記述する。
datetime startTime = iTime(NULL, PERIOD_M1, aStartIndex);

  • 定数

定数は全て英大文字または数字のスネークケースで記述する。ただし、オブジェクト形式マクロではないことを示すために英小文字cを先頭に付加する。
const color cARROW_COLOR = clrGreen; // アローの色

  • 静的ローカル変数

静的ローカル変数はローワーキャメルケースで記述する。ただし、先頭に静的ローカル変数であることを示す英小文字sを付ける。付加する時はアンダーバーで区切る。
static datetime s_dt;

  • 引数

引数はアッパーキャメルケースで記述する。ただし、先頭に引数であることを示す英小文字aを付ける。aはArgument(引数)のこと。
datetime getHanteiTime(datetime aTime){

  • パラメータ

パラメータはアッパーキャメルケースで記述する。ただし、先頭にパラメータであることを示す英小文字pを付ける。pはparameter(パラメータ)のこと。
input int pCandleSu = 100;    // ローソク足の本数

この癖付けが、ミスがないプログラムを書けるようになる最初の一歩です。

では、まただお。

Twitterでフォローしよう

おすすめの記事