今回は、繰り返し処理の途中で使用し、繰り返し処理を強制的に抜けるために使用する、break文の解説をしたいと思います。
for文の解説時に作成したソースを利用して解説して行きたいと思います。
・for文を使用して複数行の文字をチャートに出力するソース TestIndicator
早速for文による繰り返し処理のあるstart関数を見てみましょう。
int start() { string moziretu = ""; for(int i = 0; i < 5; i++) { moziretu = moziretu + "Hello MQL4\n"; } Comment(moziretu); return(0); }
実際にbreak文を使用してみます。まずは、for文の中の最初のところにbreak文を入れてみます。
int start() { string moziretu = ""; for(int i = 0; i < 5; i++) { break; moziretu = moziretu + "Hello MQL4\n"; } Comment(moziretu); return(0); }
37行目が追加したbreak文です。早速コンパイルして、チャートにセットしてみましょう。
何も表示されませんね。このように、break文はfor文による繰り返し処理を強制的に抜ける効果があるため、38行目は1度も実行されなかったのです。
では、試しにbreak文の位置を次のように変更してみましょう。
int start() { string moziretu = ""; for(int i = 0; i < 5; i++) { moziretu = moziretu + "Hello MQL4\n"; break; } Comment(moziretu); return(0); }
修正が終わったらコンパイルして出力結果を確認してみて下さい。
1度だけ”Hello MQL4″が出力されましたよね。これで、確かにfor文は実行されているがbreak文により強制的に抜けているというのが確認できたと思います。繰り返し処理にはwhile文もありますが、break文の使い方はfor文と全く同じです。
実際にはbreak文をこのように使うことはなく、ほぼ必ずif-else文で条件分岐を行い、ある条件に合致した場合には繰り返し処理を抜ける、という形で使われます。
良い例ではありませんが、例えば以下の様な使い方をします。
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 MQL4″が3行出力されましたよね。37行目のif文により、iが3の時、すなわち4行目を出力しようとする前に、break文により強制的に繰り返し処理を抜けているためです。
良い例ではないと言ったのは、同じ処理を実装するならif文は使用せず、for文を”for(int i = 0; i < 3; i++)”のように変更するのが自然だからです。今回は、これまでに解説した内容のみでの説明にしたかったためこのようにしました。
繰り返し処理を途中で抜けることは多々あることですので、break文はマスターしておきましょう。
switch-case文にもbreak文は出てきましたが、少し特殊でしたね。switch-case文の処理を抜けるという意味もありますが、同時に下のcase文に処理を流さないようにするという意味もありました。
また、以下のように場合によってはfor文の中にfor文があって、その中にbreak文がある場合があります。
int start() { string moziretu = ""; for(int i = 0; i < 5; i++) { for(int j = 0; j < 5; j++) { moziretu = moziretu + "Hello MQL4\n"; break; } } Comment(moziretu); return(0); }
この場合のbreak文で抜けるのは、内側のfor文だけであることに注意して下さい。一気に2つのfor文を抜けるわけではありません。
このようにfor文が複数回重ねて使われることを”入れ子にする”と言います。この入れ子という事は、for文だけでなくif-else文やwhile文でもありえます。
ちなみに上の例でbreak文がなかった場合、内側のfor文の中身の処理は5×5=25回実行されます。
・今回作成したbreak文のサンプル TestIndicator