文字と数値の違いを覚えても、実際に自分のコードでどこを間違えるとエラーになるのか分からない——という人向けの記事です。この記事では、文字・文字列・数値の違いの解説に加えて、実際にMetaEditorでコンパイルして確認できるサンプルコードを紹介します。

文字と数値について

プログラミングにおいて同じ「1」でも実は違います。文字と数値は別々なものとして認識されます。

今回はプログラミングにおける文字と数値の違いについて説明していきます。

文字

文字は1つの文字を表すために使用されます。例えば「a」や「A」などは文字になります。

プログラムの中で文字を表現する場合にはシングルクオーテーション(‘)で囲んで表現します。

MQL プログラミング基礎 文字

文字は以下のように記述します。

'a'
'G'

また「0」や「1」と言った数字も文字として扱うことができます。

'0'
'1'

注意すべき点は’1’と記述した場合は数値ではなくあくまで「1」という文字だということです。

数値と文字は区別されますので’1’に対しては計算などは行えないので注意しましょう。

文字列

文字は1つの文字を表すために使いました。文字列というのは複数の文字の並びのことを言います。

例えば「abc」であるとか「apple」などです。

文字列を表現する場合にはダブルクオーテーション(“)で囲んで表現します。

MQL プログラミング基礎 文字列

文字列は以下のように記述します。

"abc"
"Watch"
"漢字"

文字列には日本語なども含めることができます。

注意点として、MQL4では文字(シングルクオート)同士を「+」でつなげても文字列にはなりません。「+」は数値としての足し算になってしまうため、複数の文字から文字列を作りたい場合は、最初からダブルクオーテーションで文字列として記述してください。

数値

数値は計算を行ったりする場合に利用されます。

文字として「1」や「2」と表した場合は文字でしたが、

数値として扱う場合は四則演算などに活用することが可能になります。

MQL プログラミング基礎 数値

プログラムの中で数値を表現する場合にはそのまま記述します。

25
1.524

数値は大きく分けると2つに分けることができます。

  • 整数
  • 小数点を含む実数(浮動小数点数)

実数は浮動小数点数と呼びます。よく使われる言葉ですので覚えておいて下さい。

整数を表す場合、10進数であればそのまま記述しますが8進数の場合は先頭に「0」を付けて記述し、

16進数の場合は先頭に「0x」を付けて記述します。

25
045
0x3E

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

数値(int)・文字列(string)・文字(char)を実際に使い分けるインジケーターで確認してみましょう。

//+------------------------------------------------------------------+
//|                                        LetterNumericalValue.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

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

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

void OnTick()
  {
   int digits = Digits;//数値(int):ブローカーの価格桁数
   string symbol_name = Symbol();//文字列(string):通貨ペア名
   char first_letter = (char)StringGetCharacter(symbol_name, 0);//文字(char):通貨ペア名の1文字目

   Comment("通貨ペア: ", symbol_name,
           "\n価格桁数(数値): ", digits,
           "\n先頭1文字のコード(文字): ", first_letter);
  }
//+------------------------------------------------------------------+
Copy

digitsは数値(int)、symbol_nameは文字列(string)、first_letterは文字(char、内部的には文字コードを表す整数)です。StringGetCharacter()は文字列から1文字だけを取り出す組み込み関数で、戻り値は文字そのものではなく文字コード(ushort)になる点に注意してください。

まとめ

同じ「1」という値でも、文字としての「1」と数値としての「1」は別物です。

しっかりと文字と数字の違いを理解しましょう。

ポイント

数字の場合:そのまま記述する
文字の場合:シングルクオーテーション(‘)で囲む
文字列の場合:ダブルクオーテーション(“)で囲む

関連記事