インデントの種類やコメントの書き方を覚えても、実際に自分のコードでどう揃えれば読みやすくなるのか分からない——という人向けの記事です。この記事では、インデント・コメントの基本に加えて、実際にMetaEditorでコンパイルして見た目を確認できるサンプルコードを紹介します。

インデントとは

MQL プログラミング基礎 インデント コメント

インデントとは、プログラムを見やすくするための字下げのことです。

インデントのことを字下げとも読んだりします。

インデントを行うことでプログラムは格段に見やすくなります。

MQL プログラミング基礎 インデント コメント

しかし、なぜインデントを行う必要があるのか?

それは、プログラムはコンピューターが読むだけではなく人も読むものだからです。

他の人が作ったプログラムを読むことや自分が書いたプログラムを後で読むこともあります。

つまり、人が読むことを配慮したプログラムの書き方が必要になります。

メジャーなインデントスタイル

今現在、一般に知られているインデントスタイルは以下のパターンがあります。

  • 1字下げにつき→タブスペース1字
  • 1字下げにつき→半角スペース4字
  • 1字下げにつき→半角スペース2字

それぞれのメリットとデメリットは以下のようになります。

種類 メリット デメリット
タブスペース1字 1回のキー入力で入力できる。
ファイルサイズが削減できる。
エディターで好きな幅に設定できる。
環境によって見た目が異なる。
引数部分をインデントする場合に
半角スペースと混同しなければならなくなる。
半角スペース4字 多くの人にとって読みやすい。
どの環境でも同じように表示される。
引数部分を同様にインデントできる。
ファイルサイズが大きくなる。
入力に4回のキー入力を要する。
半角スペース2字 どの環境でも同じように表示される。
引数部分を同様にインデントできる。
多くの人にとって読みにくい。

コメントとは

プログラムは記述した順番に処理が行われますが、

プログラムの中には、この処理はこのように行っているという説明をする必要があります。

処理の説明を行うことをコメントと言います。

MQL プログラミング基礎 インデント コメント

しかし、説明文をそのままプログラム内に記述すると

プログラムをコンパイル(翻訳)すると文法エラーとなります。

つまり、プログラム中にコメントを記述する場合は、

どこからどこまでがコメントなのかをわかりやすくする必要があります。

コメントを記述する場合は”/* ~ */”と”//”の2つのタイプのコメントを使うことができます。

/* コメントを記述する */

コメントは複数行に渡って記述することができます。

あくまで「/*」で開始され「*/」で終わるまでの間に書かれたものは全てコメントとなります。

/*
コメントを記述する
複数行に渡ってコメントは
記述できます。
*/

他にも//だと

// 行末までコメント

という形でコメントを書くことが可能です。

適切な文と適切な量のコメントをプログラムに記述することで、

それがどのようなプログラムなのかを明確に知ることができるようになります。

実際にコンパイルして確認する

半角スペース3字のインデントと、/* */・//両方のコメントを使った、値幅をpips単位に変換する短いコードで、実際の見た目を確認してみましょう。

//+------------------------------------------------------------------+
//|                                             IndentComment.mq4     |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

/*
   価格差(price_diff)をpips単位に変換する関数。
   5桁/3桁ブローカーは1pip=10Pointなので調整する。
*/
double PriceToPips(double price_diff)
  {
   double pip_size = Point;//基本は1Point=1pip

   if(Digits == 3 || Digits == 5)//5桁/3桁ブローカーの場合
     {
      pip_size = Point * 10;//1pip=10Pointに調整
     }

   return(price_diff / pip_size);
  }

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   Comment("");
  }

void OnTick()
  {
   double spread_pips = PriceToPips(Ask - Bid);//現在のスプレッドをpips換算
   Comment("スプレッド: ", DoubleToString(spread_pips, 1), "pips");
  }
//+------------------------------------------------------------------+
Copy

関数の説明は複数行コメント(/* */)、処理1行ごとの補足は行末コメント(//)、というように使い分けています。if文の中身が1段階深くインデントされているのも確認してください。

まとめ

インデントやコメントを活用することでプログラムの処理をわかりやすくなります。

また、プログラムが複雑になればなるほど、インデントとコメントが大切になってくるので、

しっかりと見やすく美しいソースコードを心がけましょう。

ポイント

インデント:字下げのこと

コメント:プログラムの処理をわかりやすくする

関連記事