今回は繰り返し処理をスキップするcontinue文について解説します。
今回も例によって前回作成したサンプルを改造して解説して行きたいと思います。
・前回作成したbreak文のサンプル TestIndicator
今回作成するのは次のようなインジケーターです。
“Hello MQL “に続けて行番号を出力します。ただし、4行目は出力しません。したがって全9行の出力となります。
以下は前回作成したbreak文のサンプルのstart関数の部分です。
int start() { string moziretu = ""; for(int i = 0; i < 5; i++) { if(i == 3) { break; } moziretu = moziretu + "Hello MQL4\n"; } Comment(moziretu); return(0); }
まずは、”Hello MQL “に続けて行番号を出力する処理を作成してみましょう。
int start() { string moziretu = ""; for(int i = 0; i < 10; i++) { moziretu = moziretu + "Hello MQL " + (i + 1) + "行目\n"; } Comment(moziretu); return(0); }
これで、”Hello MQL XX行目”という出力が10行分得られます。
あとは、4行目の出力を取り除くだけです。以下のようにcontinue文を使用すると、簡単にできます。
int start() { string moziretu = ""; for(int i = 0; i < 10; i++) { if(i == 3) { continue; } moziretu = moziretu + "Hello MQL " + (i + 1) + "行目\n"; } Comment(moziretu); return(0); }
37行目でiが3の時、すなわち4行目の処理の時にcontinue文が実行されます。そうすると、for文内のcontinue文以降の処理が実行されずスキップされ、for文の次の処理、すなわち5行目の処理へと移ります。結果として”Hello MQL 4行目”が出力されなくなるのです。
このように、continue文はある条件に合致する場合に、continue文以降の繰り返し処理をスキップしたい場合に使用します。break文と違うのは以下のとおりです。
・break文は以降の繰り返し処理が全く実行されないで、繰り返し処理から強制的に抜ける。
・continue文はその時の繰り返し処理は実行されないが、次の繰り返し処理が継続して実行される。
break文同様、continue文はfor文だけでなくwhile文でも全く同様に使用出来ます。
もちろん、以下のようにbreak文とcontinue文を同じ繰り返し処理の中で使用することもできます。
int start() { string moziretu = ""; for(int i = 0; i < 10; i++) { if(i == 3) { continue; } if(i == 7) { break; } moziretu = moziretu + "Hello MQL " + (i + 1) + "行目\n"; } Comment(moziretu); return(0); }
上のコードをコンパイルしてチャートにセットしてみて下さい。どうですか?想像通りになりましたか?
ここでは、前のコードに41~44行目を追加しました。これによってiが7の時、すなわち8行目の処理で、文字列を出力する前にbreak文で強制的にfor文から抜けています。したがって8行目以降が出力されなくなったのです。(実際には7行目以降が出力されなくなっているのですが(^_^;)
・今回作成したcontinue文のサンプル TestIndicator