【Q&A】whileとforの使い分けの仕方

こんにちは、@codeship_techです。

本日の質問がこちら。

while文とfor文の使い分けを教えてください!

ということで、プログラミングの基本構文についての質問ですね。

どんな言語でもそうですが、こういった似た役割を持つ構文や関数が出てきたときは、「なにが違うの?どっちを使うのが正解?」という疑問はでがちですよね。

ぜひ参考にして理解してみてください!

それではこちらの質問に答えていきます。

傾向としてfor文は繰り返す回数がわかっているときに、while文は繰り返し回数が分からないときのループに用いられます。

繰り返しを制御する

同じ処理を繰り返して行いたいとき、同等の処理内容を何度も記述することはプログラミングの上でご法度です。

console.log("Hello User 1");
console.log("Hello User 2");
console.log("Hello User 3");
console.log("Hello User 4");
console.log("Hello User 5");

そこで制御構文のfor文を使い、共通部分を抜き出して記述量を減らすのが定石です。

// (開始条件, 継続条件, 更新条件)
for(let i = 1; i <=5; i++){
console.log(`Hello User ${i}`);
}

ところで、この繰り返し処理はwhile文でも全く同じことができます。

let i = 1; //開始条件
while(i<=5){ //継続条件
console.log(`Hello User ${i}`);
i++; //更新条件
}

ではこの両者はどう使い分ければ良いのでしょうか?

というのが今回の質問の趣旨ですね。

これは両者の単語の意味を考えるとスッと理解できるのではないでしょうか。

英単語 for とは「これこれの条件のもと」という意味です。
for文の ()内部には繰り返しを制御する条件である、それぞれ (開始条件, 継続条件, 更新条件) が必要です。

当然「何回ループをするのか」を書き手が定めないといけません。

英単語 while とは「~までの間」という意味です。
while文においては、~には処理の継続条件が入ります。

上記の例では繰り返し1ずつ加算されていく i が5までの間という意味になりますので、有限回数の繰り返しですからforと使い方は変わりません。

しかし繰り返し回数が不定のときも「~までの間」と述べることができますよね。

例えば「ファイルが読み出せるまでの間」とか「ユーザから応答があるまでの間」といった具合です。

以下の例では更新条件を持たせずに、 isValidUserの値がtrueになるまで繰り返し処理をしています。

let isValidUser = false;while(!isValidUser){ //isValidUserがfalseである限りずっとループし、何回目で終了するかは不定
if(...){ //何らかの条件でisValidUserが書き換わる
   isValidUser = true //trueになったとき、ループが終了する
   }
}

for文でも繰り返し回数が不定なときの記述はできますが、ややいびつな書き方をします。

for(;;){
if(終了条件){
break;
}
}

whileの方が見通しがよく、不定回数の繰り返しではよく使われる手法ですね。

初学者の方はいずれの書き方もできるよう、for文とwhile文の基本構文の復習をしておくと良いでしょう。

本日は、プログラミングの基本構文について解説しました。