\r\n\r\n

コンピュータプログラミングにおけるwhileループの仕組み

ループは、プログラミングで最初に学ぶ制御の種類の1つです。whileループやforループはご存知でしょうが、whileループで何ができるのか...。

プログラミングを学ぶ場合、基本的な構成要素を理解することが早期成功のカギとなります。後で難しいテーマを学ぶことになりますが、変数の型やループ、関数などを理解していないと、なかなか深みにはまることができません。

新米プログラマーの多くは、すぐにif-else文、whileループ、forループについて学びます。しかし、あまり知られていないループの種類に、do whileループがあります。このループがどのように機能するのか、そして、このループを使いたいときの例をいくつか見てみましょう。

基礎知識

do whileループは、コードブロックを少なくとも1回実行し、条件が真であるかどうかをチェックし、その条件に基づいて内部でコードの実行を継続します。疑似コードの簡単な例を見てみましょう(学習の助けになりますから!)。:

do { output "The variable x equals " + x; x++;} while (x < 5);output "The loop has ended.";

このコードでは、do括弧の中の行は常に少なくとも一度は実行されます。これは、xがループの開始時にあったものであれば何でもよいことを意味します。

xが1になった状態でループを開始すると、xがwhileの次の条件を満たさなくなるまで繰り返されます。そのため、合計5回実行されることになります。xが5より小さくないとき、ループは終了し、次のコードに続く。この出力は以下のとおりです。

The variable x equals 1 The variable x equals 2 The variable x equals 3 The variable x equals 4 The variable x equals 5 The loop has ended.

一方、xを20にしてループを開始すると、1回だけ実行される。つまり、x が 21 まで増加し、21 が 5 よりも小さくないのでループが終了する出力文が表示されます。

The variable x equals 20 The loop has ended.

whileループ、forループとの比較

do whileループは、他のループとどう違うのですか?最も重要な違いは、do whileループはコードのブロックを実行した後に条件をテストするのに対し、他のループはブロックを実行する前に条件をチェックすることである。

比較のために、以下の基本的な擬似コードwhileループを考えてみましょう。

x = 10;while (x < 5) { output "The loop has run!"; x++;}

ここでは、xを10に設定し、whileループでxが5より小さいかどうかを確認してから実行する。したがって、中のコードは決して実行されない。同じロジックをdo whileループに適用すると、次のような結果になる。

x = 10;do { output "The loop has run!"; x++;} while (x < 5)

このループはテキストを一度出力し、xをインクリメントし、その後継続します。

なお、do while関数は、以下のようにwhileループの前に文を追加して再作成することができる。

output "Hello!";x++;while (x < 5) { output "Hello!"; x++;}

しかし、これは扱いにくいもので、サイクルが存在する間に行う場合は、そうする理由がないのです。

フォアループ

do whileループはforループと似ている。forループでは、ループの実行時間を指定する変数を定義し、各反復の終了時の動作を設定する。

以下は、比較のための単純なforループです。

for (int i = 0; i < 5; i++) { output "The loop has run " + i + " times.";}

これは、do whileループとforループの良い対比です。最初に条件を設定するので、forループが何回実行されるかが正確に分かります。上記のコードをdo whileループに修正すると、以下のようになります。

do { output "The loop has run " + i + " times."; i++;} while (i < 5);

ループの実行時に問題が発生することがあります。iを他の場所で初期化しないと、doの部分が実行されたときにその値がどうなるかがわからない。このループの実行時にiが500であれば、ここでの出力は不正確なものになる。

まとめると

  • do whileループは、少なくとも1回はコマンドを実行し、条件が偽になるまで継続したい場合に有効です。
  • whileループは、条件が真のときにコードのブロックを繰り返し、条件が真でなくなったらすぐに停止させることができます。
  • forループでは、独自のパラメータを設定することで、ループを何回実行するかを指定することができます。

do whileループを抜ける

もちろん、do whileループは、他のループと同様に、終了条件が必要です。さもないと、無限ループに陥る可能性があります。次のようなコード・スニペットを考えてみましょう。

x = 5;do { output "This never ends!";} while (x < 10);

もし、コードのどこかにxを追加しなければ、ループは永遠に続くことになります。さて、無限ループが有効な場合もあります。プログラマーは、ループをどこかから解除するようにコードを設定するからです。しかし、初心者のプログラマーは無限ループでつまずくことが多い。

以下は、適当な無限ループの例である。例えば、ユーザーがダイスを振って6を出せば基地から出られるというゲームを設計しているとします。サイコロを振って、6の目が出るまで続ける。したがって、次のようなコードを使用することができます。

do { int roll = random(1, 2, 3, 4, 5, 6); if (roll == 6) break;} while (true);

while (true)条件は、ループが永遠に続くことを意味します。これは、ユーザーが6に到達するまでスクロールしなければならないので、望ましいことです。 break文がなければ、行き詰ってしまいます。しかし、ユーザーが6までスクロールしてif文が真になると、シーケンスはループから飛び出して、その後に続くものへと進みます。

break文を使いたくなければ使わなくてもいい。むしろ、break文はできれば避けたほうがいい。これらは、コードの保守を困難にし、条件付き終了でトレースを容易にします。従って、以下の修正コードで同じ目的を達成することができます。

do { int roll = random(1, 2, 3, 4, 5, 6);} while (roll != 6);

悪い無限ループ

出口が決まっている無限ループはいいのですが、次の例のように誤って無限ループを作ってしまうことがあります。

int x = 7;do { x = 1; x = x + 2; output "x equals " + x;} while (x < 10);

これは、ループごとにxが2ずつ増え、xが10以下になるまで繰り返されるように見えるかもしれませんが、よく見てください。このループは実行するたびに x を 1 にするので、無限ループとなる。なお、x=1 と x=x+2 は、何度実行してもブロック終了時の x が 3 になることを意味し、x が 10 より小さくなることはありません。

これを避けるために、実行するたびに不用意に変数を変更するループの文に注意しましょう。

実例紹介

以上、いくつかの仮想的な例について説明しましたが、do whileループの便利な実用例について簡単に見てみましょう。

ファイルのデータを最後まで読み込むループを作りたい場合は、do whileループを使用します。明らかに、ファイルからデータを読み取ることを意図している場合、少なくとも1文字は取得する必要があるので、このようなdo whileループを使用することができます(Stack ExchangeユーザーのSteven Burnap氏に例を示していただきました)。

do { result = readData(buffer);} while (result != EOF);

しばらくの間、そうでない場合は、少し醜い解決策を使わなければならないでしょう。

while (true) { result = readData(buffer); if (result == EOF) break;}

もう一つの例は、ユーザーからの入力を得ることです。ユーザーに正の数を入力するように求めるプログラムを書いているとします。do-whileを使うことで、その入力が適切であることを確認することができます。

do { output "Please enter a positive number:"; int input = getInput();} while (input < 0);

このループを使うと、ユーザーは数値を入力するプロンプトが表示され、一回だけ数値を入力することになります。負の数を入力すると、ループが再び実行され、条件を満たすまで正の数を入力するように促される。他のループは、この種の操作には意味をなさないのです。

do whileループを使う準備はできましたか?

whileループの基本、使い方、他のループとの比較などを調査します。もし、この記事で何も覚えていなかったら、do whileループは、少なくとも一度はループを実行する必要があるが、ループを開始する前に何回必要なのか分からないような状況に適していることを知っておいてください。

このような状況をプログラムの中で考えてみると、do whileループの場所が簡単に見つかるはずです。ほとんどの初心者向け言語がwhileループをサポートしているので、問題なく実装できるはずです。

基礎から学ぶ場合は、新しいプログラミング言語をマスターするための重要なヒントを必ずご確認ください。

他に、「しばらく」をすることに意味がある場面はありますか?もしあなたのプログラムでdo whileループを使っていたら、ぜひコメント欄で議論して教えてください。

画像引用元:Aaban via Shutterstock.com ウェブサイト

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ