【MQL】コンパイルエラーでつまずかないために

このページでは、コードを書いているとコンパイルエラーにぶつかりなかなか解決せず苦戦するといったことが無いように注意する点などについて解説します。

コードを書いているとどうしても忘れてしまい、後々困るといったことが慣れてきた今でもたまにあります。

そんな点についてお話しします。

目次

コンパイルエラーとは

そもそもコンパイルとは、プログラミング言語で書かれたコードをコンピュータが理解できるように機械語に変換することです。

その際に、コードに間違いがあるとうまく機械語に変換できずエラーが発生してしまいます。その状態をコンパイルエラーと呼びます。

よくやるエラー原因代表例

注意しているつもりでもよくやってしまう代表的なエラー原因についていくつか挙げてみます。

スペルミス例)〇:iRSI(省略); ×:iRSL(省略);
セミコロン抜け例)〇:int num = 100; ×:int num = 100
コードブロックの不足例)〇:if(条件式){コード;} ×:if(条件式){コード;
全角スペースの存在例)〇:int num = 100; ×:int num = 100;

それぞれについて解説します。

スペルミス

コンパイルエラー時にこんな変数/関数は無いよとエラーを返してくれるのでエラー個所は比較的見つかりやすいです。

宣言されている変数や関数は、次回入力時に予測変換として表示されるので、それを使うようにすれば防げます。

セミコロン抜け

コード分の最後にはセミコロン「;」が必要です。

セミコロンを付け忘れると次の行で記述しているコードも、付け忘れのコードの続きと解釈され、間違った引数を指定していると判断されたりしてエラーとなります。

コンパイルエラー時は「セミコロン抜け」というエラー表示はしてくれません。

そのため、エラー個所がわかりづらいですが、エラーの前行を確認するようにすると見つけることが出来ます。

コードブロックの不足

if文やfor文を使うことで波カッコ{ }を使うことになりますが、こういった制御文を入れ子にして使うことが多々あります。

以下のようなコードです。

if(condition)
{
   if(condition)
     {
         //コード分
     }
     else
     {
         //コード分
     }  
}
else
{
   //コード分
}

if文の中にif文を追加する例です。

この時にしっかりとコードブロックを正しく記述していないとエラーになります。

大量のコードが記述されてくると見つけるのも難しくなってきますので、if文やfor文を作る際には、中身のコードを書く前に先にコードブロックを記述するようにしましょう

全角スペースの存在

これは初めのうちは悩まされたことがあります。

コードを書く際にコメントを利用することが多いですが、その際に全角変換してコメントを入力後、戻し忘れてスペースを入力してしまうといったケースです。

半角スペースと全角スペースは一見判りづらいため、エラーの行はわかってるのに、どこも間違ってないと思ってしまうことがありました。

エラー防止策

エラー解決に時間を取られるくらいなら、コードのアイデアを考えたり、いくつもバックテストを取った方が有益です。

もちろんエラー解決による経験値も上がりますが、挫折にもつながりかねませんので、ケアレスミスは無くすようにして効率の良いプログラミングを行っていくことをお勧めします。

そのための防止策について2点お伝えします。

字下げの活用

先ほどの制御文の例を、字下げを使わなかった場合で記述してい見ます。

if(condition)
{
if(condition)
{
   //コード分
}
else
{
   //コード分
}  
}
else
{
//コード分
}

こうなるとこのコード自体が正しいのかどうかさえ分からなくなってしまいます。

エラーを引き起こす要因になりますので、しっかり字下げを活用するようにしましょう。

こまめにコンパイル

慣れないうちは1行追加するたびにコンパイルすることをお勧めします。

コンパイルと言ってもボタン一つで完了しますし、ファイルの保存感覚で出来るので何度やっても問題ありません。

むしろ、コードをいっぱい記述した後にコンパイルしてエラーが出ると、エラー個所を見つけるのも一苦労しますので、慣れたとしてもやっておいた方が良いです。

1行追加するごとにコンパイルすれば、どのコードにミスが含まれているのかがすぐわかりますので、コンパイルを癖づけて実行するようにしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次