この章のテーマ §
繰り返し処理の基本中の基本であるdoステートメント(do文)と、whileステートメント(while文)を学びます。もっと便利な機能が多いので、見かける頻度は多くありませんが、それでも結構な頻度でお目に掛かる重要な機能です。
前提知識 §
Console.Writeメソッド, Console.WriteLineメソッド,変数の基礎, 条件演算子, int型, 複文
解説 §
コンピュータでプログラムを作成する強みは、条件判断と繰り返しにあります。
1回限りの計算であれば人間がやった方が早いと言えます。しかし、大量のデータを繰り返し計算するなら、コンピュータに任せると楽です。その際、個別のデータの特例がいくらでもあるので、条件判断の機能があると自動化が大幅に進みます。
さて、キーになる繰り返し機能ですが、C#にはいくつかの繰り返し機能が存在します。
その中でも最も基本的なものがdoステートメント(do文)と、whileステートメント(while文)です。
- do 繰り返す文 while( 繰り返しを続ける条件を示す条件式 );
- while( 繰り返しを続ける条件を示す条件式 ) 繰り返す文;
上がdo文、下がwhile文です。
繰り返す文は、多くの場合、波括弧で囲んだ複文として複数の文を記述します。
さて、この2つの機能はほぼ同じです。サンプルソースの実行例の【do文で繰り返す(その1)】と【while文で繰り返す(その1)】の結果は全く同じですね。指定された文を指定された条件が成立している限り繰り返すだけです。
しかし、この2つの文の機能は完全に同じではありません。
do文は、対象の文を実行してから条件をチェックします。
while文は、対象の文を実行する前に条件をチェックします。
だから、もしも判断の根拠となる数字を対象の文が計算していたときはwhile文は使えません。計算するまで判断はできないからです。
逆に、判断根拠が実行する文と関係ないときはwhile文を使っても可です。
初期状態では常に条件が成立しているように変数を設定してwhile文を使う場合もあります。
罠の数々 §
- do文は条件不成立でも繰り返す文を1回実行する。while文は条件不成立の場合は1回も実行しない。この差をよく理解しておこう (実行結果の「その2」の差を見てみよう)
参考リンク §
反復ステートメント (C# リファレンス)
サンプルソース: kw_do_while §
int x = 1;
Console.WriteLine("do文で繰り返す(その1)。");
do
{
x *= 2; // 変数xを2倍する
Console.Write(x);
Console.Write(" ");
}
while (x < 100);
Console.WriteLine();
x = 1;
Console.WriteLine("while文で繰り返す(その1)。");
while (x < 100)
{
x *= 2; // 変数xを2倍する
Console.Write(x);
Console.Write(" ");
};
Console.WriteLine();
x = 100;
Console.WriteLine("do文で繰り返す(その2)。");
do
{
x *= 2; // 変数xを2倍する
Console.Write(x);
Console.Write(" ");
}
while (x < 100);
Console.WriteLine();
x = 100;
Console.WriteLine("while文で繰り返す(その2)。");
while (x < 100)
{
x *= 2; // 変数xを2倍する
Console.Write(x);
Console.Write(" ");
};
Console.WriteLine();
実行結果 §
do文で繰り返す(その1)。
2 4 8 16 32 64 128
while文で繰り返す(その1)。
2 4 8 16 32 64 128
do文で繰り返す(その2)。
200
while文で繰り返す(その2)。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
while( true ) { …… }という文を見かけた。条件式が常にtrue(真)ということは、永遠に繰り返しを続けて終わらないということだ。これは無意味ではないだろうか?
意味があるかないか考えてみよう。
もしあるなら、どんな理由があるだろうか。
[[解答]]