初心者のためのVB.NETの基本 ~繰り返し処理編~

####はじめに
初心者向けに参考書の0章によくある感じのお話です。
が、教科書では御法度な感覚的表現を多用してます。

なお、VB.NETに限らずプログラミングのイロハ的な内容も含んでいます。

##繰り返し処理とは

読んで字のごとく一定の処理をぐるぐると繰り返すだけのことです。ただ繰り返し処理の中にも複数のキーワードが存在するので、一つずつ見ていきましょう！

※文中使用させていただいている各種フローチャートは、[こちら](http://www.b.s.osakafu-u.ac.jp/~hezoe/pro/chapter5.html)より引用させていただきました。

###For文
![for文.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410161/e5e11815-a1be-2216-1e94-3a10c901c6ac.png)

```
For カウンタ変数 = 初期値 To 終了値 (必要ならStep) 
  繰り返す処理
Next カウンタ変数
```

For文は何回繰り返し処理を行うのか分かっている場合に使用します。

#####カウンタ変数
繰り返し処理でよく見る"i"のことです。繰り返しで一定間隔ずつ増加する値を表現しています。



上記コードで終了値の脇にStepと書きましたが、ここには増加していくカウンタ変数の増加の値を書きます。ちなみにカウンタ変数はデフォルトでiは1ずつ増加するので、それ以外の増加の際には明示的に"Step 数値"を記述してください。




###While文
![while文.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410161/87c4cbcc-97a8-72aa-e703-260354582c75.png)

```
While 条件式
  繰り返す処理
End While
```

For文では処理を繰り返す回数が決まっていたのに対し、While文ではどういう状態であれば処理を続けるかの条件が必要となります。


While文では処理を実行する前に"継続条件"を読みに行きます。ここで一度目の処理を実行する際にいきなり継続条件を満たしていない場合もあります。このような時While文は問答無用に処理をぶった切ります。
大前提の条件を満たせないなら、処理はさせない！！厳格さが売りのWhile文です。

###Do Loop文
![do_while.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410161/5cbf4752-6714-12da-271b-16debb55ceae.png)

While文のフローチャート図とDo Loopのそれとを見比べてみましょう。似たような構図ですが、"文"と"継続条件"の位置関係が入れ替わっているのに気付きましたか？これがWhile文とDo Loop文における違いを生み出しています。

>大前提の条件を満たせないなら、処理はさせない！！厳格さが売りのWhile文です。

厳格なWhile文に対して、多少ルーズなのがDo Loop文です。

"継続条件"を読む前に"文"を読みに行っています。これはつまり「こいつは実行していいやつなのか？！」を判断する前にまず最初の処理を実行させてしまうわけです。問題が起きてから捕まえればいいでしょ～って思っちゃうのんきな警備員、といったところでしょうか。

こんな感じのルーズなDo Loop文なので使いどころもWhile文より限定されるようです。


```
Do While 条件式
  繰り返す処理
Loop

Do
  繰り返す処理
Loop While 条件式

Do Until 条件式
  繰り返す処理
Loop

Do
  繰り返す処理
Loop Until 条件式
```

ちなみにDo Loop文には上記のように様々なバリエーションが存在します。使い分けについてはまた後日？


####Exit（中断）

ここまで見てきた繰り返し処理ですが、原則"継続条件"を満たす限りは処理は続いていきます。当然ですよね。

なんですけど、様々な理由から当初の繰り返しよりも少ない回数や条件で処理を行いたい時もあるかもしれません。そんな時に使うのがExitです！

```
Dim i As Integer

For i = 0 To 100
  Console.WriteLine(i)
  If i = 4 Then Exit For
Next
```

```
'実行結果
0
1
2
3
```

カウンタ変数が0から100までの間処理を繰り返す（しかもStepだって明示してないってことは1ずつしか増加していかない...）だなんて、気が思いやられる。

と思いきや一瞬で処理が終わってしまいました！


スパっと処理を終了させる感じがReturnと似てますね。実際、プロシージャの処理を中断させる用途でもExitは活躍します。ただし、Returnは戻り値を返すという性質を持ち合わせているので、Exitとの使い分けには注意してくださいね。


####Continue（スキップ）

```
For i As Integer = 0 To 5
  If i = 2 Then Continue For
  Console.WriteLine(i)
Next
```

```
'実行結果
1
3
4
5
```

Continueを使うことで、カウンタ変数が特定の値のときの処理を実行しないで済ますことができます。

Exitの場合、カウンタ変数が宣言した値に到達したら処理そのものが終了していました。それに対し、Continueはその名の通り処理自体は続行していきます。


####無限ループ

例えば、Do Loop文で条件式を記述しない場合には、終わり時が判断つかないため無限に実行されてしまいます。これを無限ループといいます。この状況下ではユーザが明示的にプログラムを終了させるまでの間、処理は実行され続けるわけです。

```
Do
  Console.WriteLine("Hello!")
Loop
```

※上記のコードを実行すると、一定時間の継続で落ちます。実行するのはあまり**おすすめしません**。

一見やっかいな無限ループですが、広く使用されるテクニックでもあります。
実はメモ帳アプリなんかもこれを応用しています。思い出してほしいんですが、メモ帳って勝手にプログラムを終了することってないんですよね。ユーザが☓ボタンを押すなどして終了させるまで生き長らえます。まさしく無限ループが使われていますね。


なお上記ではDo Loop文での無限ループ例ですが、ほかにもFor文やWhile文でも再現可能です。気になる人はググってみてね。




##リファレンス
初心者はもちろん、玄人の皆さんも参照されていること必至のリンク群です。

[DOBON.NET](https://dobon.net/vb/dotnet/index.html)
具体的に豊富な単元について解説されています。.NETを書く人なら一度はお世話になっていそうな有名なサイト。

[総武ソフトウェア推進所](https://smdn.jp/programming/netfx/)
各単元について深く掘り下げて解説してくれます。いつもお世話になってます！

[Microsoft公式](https://docs.microsoft.com/ja-jp/dotnet/#pivot=docs&panel=dotnetguides)
困ったときは公式に当たるのが定石らしい。

[VisualBasic中学校](http://rucio.o.oo7.jp/main/main.htm)、[VB図解](http://rucio.a.la9.jp/main/kiso/index_kiso.htm)
こちらも単元ごとにていねいに解説されています。

[未確認飛行C](https://ufcpp.net/)
VB.NETにフォーカスしていないものの、参考になる部分も多そうです。