前回は datetime型というデータ型について解説しました。
改めて前回の内容をおさらいをしておくと、
- 日付・日時データは以下のプロセスを経て表現できる↓
- 大文字アルファベットの「D」を書く。
- 年、月、日の順に、ピリオドで区切る形で記述する。
- 日 の後に、半角スペースを開けてから時間、分、秒の順にコロンで区切る形で記述する。
- 大文字アルファベットのD以降の記述内容をシングルクォーテーション(‘)で挟む
ということをお伝えしました。
データ型についてはとりあえず一区切りがついたかと思います。
皆様お疲れ様でした<m(__)m>
今回は定数についてお話ししたいと思います。
※MQL5で自動売買プログラム作るにあたっては、MT5・メタエディター5がお使いのパソコンにインストールされている必要があります。
もし、まだMT5のダウンロードが完了していない方は、
こちらからデモ口座の開設とMT5のダウンロード・インストールを完了して頂ければと思います。
定数とは?
カラー型やdatetime型に関する解説記事の中でも、少し触れた概念ですが、
定数→定まった数→決まっている、変わらない数
で、変数→変わる数
とは逆の概念になります。
※変数については↓の記事をご覧ください。
変数では、新しい値を代入することによって、値を変えることができるのですが、定数ではそれが一切できない、ということになります。
定数を理解し、使いこなすことのメリット
つまり定数は、変更されることのない固定値であり、プログラム全体で一貫した値を保証する事になります。
定数をうまく扱う事は、エラーの可能性を減らし、コードの可読性を高めることができます。
また、例えば、特定の計算や操作に頻繁に使用される数値や設定を定数として定義することで、その値をプログラム内の複数の場所で繰り返し使用することが可能になります。
総じて、定数を適切に活用することは、これからEAやカスタムインジケーターなどの複雑なプログラムを開発する際に、大きなメリットをもたらします。
順を追って、丁寧な解説を心掛けましたので是非上記のようなメリットを獲得できるイメージを抱きながら楽しんでお読みいただければと思います。
定数の作り方・使い方
定数を作る方法は二通りあります。
・・・なんだか、また謎の言葉が出てきた( ゚Д゚)
と思われたかもしれませんが、そんなに難しい話でもありません。
順にみていきましょう。リラックスして読んでください<m(__)m>
#define命令(define directive)を使う
#define命令というのは、
定数を設定するのに使用される処理
のことです。
こんな感じで使います。↓
//「PI」という名前の定数を作り、値は3.14とする
#define PI 3.14
void OnStart()
{
//定数PIをコメント出力をする
Comment(PI);
}
こんな過程を踏んで定数を作ります。
#が頭につく記述だと、以前#プロパティ命令という処理のことを第4回で書きましたね。
#プロパティ命令については詳しくは↓をご覧ください。
#defineで定義した定数は、どのデータ型の値も格納できます。
文字列の場合↓
//「MYNAME」という名前の定数を作り、値はMQL5世とする
#define MYNAME "MQL5世"
void OnStart()
{
//定数MYNAMEをコメント出力をする
Comment(MYNAME);
}
実行してみます。
整数でも↓
//「INTEGER」という名前の定数を作り、値は1234とする
#define INTEGER 1234
void OnStart()
{
//定数INTEGERをコメント出力をする
Comment(INTEGER);
}
実行してみると
#define定義で定数を作る場合、変数のようにint や double、 stringといったデータ型をつける必要はありません。
const指定子を使う
記述はこんな感じになります。
void OnStart()
{
//const指定子をつけて変更不可にする
const int Constant=1234;
}
変数宣言の時に使う整数型intの前にconstをつけました。
これで定数「Constant」の完成です。
変数であれば、代入によって、新しい数値に変えることもできるのですが、const指定子をつけた定数「Constant」に新たな値を代入しようとすると、
void OnStart()
{
//const指定子をつけて変更不可にする
const int Constant=1234;
//5678を代入する
Constant=5678;
}
このコードをコンパイルすると・・・
「constant cannot be modifie→定数は値を変えられません」
というコンパイルエラーが出てしまいます。
おまけ -パラメトリック形式の定数記述-
これから書くことは本当にマジで、おまけです。ほとんど使う事がないので、余計な脳のリソースを使いたくない人はすみやかに次回にお進みください。
パラメトリック形式の定数記述とは、
#define命令時に、関数がやるように、算式で定数を定義づけようという定数の記述形式
のことです。
言葉だけだとよくわからないと思います。具体例を見ていきましょう。
#define PI 3.14
#define CalCirc(diameter) PI*diameter
void OnStart()
{
double di=5;
double circumfence=CalCirc(di);
Print(circumfence);
}
最初に#define命令によって、定数「 PI」の値を 3.14に定めます
次の行で設定した定数CalCircは、まるで関数のように()内に diameter という引数(パラメーター)をもっています。
※関数についてはまだ詳しい解説をしていないですが、先に知りたい方はコチラをご覧ください。
()の横に書いている PI*diameterは
3.14 × diameter (ここに代入される数値)という掛け算を表しており、
定数CalCircを使う時には()内にPIと掛け算をする数値をもってくることで、PIとの掛け算の結果を返してくれる処理をします。
OnStart関数で呼ばれた定数CalCircの()内にはdouble型の変数「di」があてがわれています。
3.14 × 5の答え→15.7が変数「circumfence」に格納されて、ログ出力されます。
↓
ですが、敢えておまけの項目で取り上げていることからもわかるように、ほとんどこういった使い方をすることはありません。
プログラミング初心者の方はその理由がピンとこないと思いますが、こういった記述をするぐらいなら、第25回で取り上げる関数の記述をさっさとしてしまった方がわかりやすいからです。
関数について先に詳しく知りたい方は↓
をご覧ください。
※掛け算を含めた四則演算の記述方法についも、まだ詳しく解説していないですが、先に知りたい方は↓
MQL5 EA講座 第30回「計算に関する記述その1-基本編-」
をご覧ください。
コメント