この章のテーマ §
列挙の基本、for文(ステートメント)を学びます。ともかく自由度が高く強力ですが、使い方を間違えると一瞬で地獄に行けます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, 複文, ++/--演算子
解説 §
for文は、C#で繰り返しを行う文の中で最も強力です。自由度も高く、whileなど他の繰り返し文のどれの代用も容易にできます。
しかし自由度が高すぎてトラブルが起きやすいのも事実です。
for文を正しく理解して、安全に使うことが重要です。
そのためには、for文でよく使われるパターンを学んで、その枠の中で使うのがお勧めです。
パターンから外れるのは、パターンを使いこなしてからで十分です。
さて、筆者がお勧めするパターンは3つあります。
昇順、降順、無限ループです。
それぞれ分けてサンプルソースに実例を書いてあります。
- 昇順 for (型名 変数名 = 0; 変数名 < 終値+1; 変数名++)
- 降順 for (型名 変数名 = 開始値; 変数名 >= 0; 変数名--)
- 無限 for (; ; )
それぞれ、0からカウントする。0までカウントするという形に統一しておくと迷いにくくなります。
無限ループの場合は永遠に繰り返しますが、if文で判定してbreak文などを実行するとそこでループを脱出することができます。事前に回数が分かっていない繰り返しには便利です。
for文の正しい書式は以下のようになります。
初期化は変数の宣言または初期値を設定する代入を書きます。
条件は、繰り返しを継続する条件を示す式を書きます。
更新は、変数を更新する式を書きます。
それぞれ全て省略可能です。
たとえば、勝手に更新されるデータを扱うとき、更新の式は不要です。
罠の数々 §
- 1からカウントしたい場合もあると思うが、0からカウントするfor文と1からカウントするfor文は紛らわしく間違いやすい。特に終了値を間違いやすい。ビギナーは混用を避けよう
- Visual Studioだと昇順のパターンはfor[TAB][TAB]で入力できる。降順のパターンはforr[TAB][TAB]で入力できる。入力も楽なので、パターンに沿って使うべき
- 無限ループはfor(;;)の他にwhile(true)などでも書ける。どれを使うのかは流儀の問題で正解はない
参考リンク §
反復ステートメント (C# リファレンス)
サンプルソース: kw_for §
Console.WriteLine("昇順");
for (int i = 0; i < 10; i++) Console.Write(i);
Console.WriteLine();
Console.WriteLine("降順");
for (int i = 9; i >= 0; i--) Console.Write(i);
Console.WriteLine();
Console.WriteLine("無限ループ");
for (; ; )
{
if (DateTime.Now.Second % 10 == 0)
{
Console.WriteLine("強制脱出!");
break;
}
}
Console.WriteLine("Finished!");
実行結果 §
昇順
0123456789
降順
9876543210
無限ループ
強制脱出!
Finished!
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
for文で使う変数の型は文字列や実数でも良いのだろうか?
正しい解釈を選べ。
- ループ変数は整数しか使えない。0.5回だけ実行なんてないでしょ?
- 型は何でも良い。一文字ずつ追加して合計が10文字を超えたら終わっても良いし、0.1ずつ加算しても良い
[[解答]]