【STEP.13】
while、do…while命令の使い方をマスターしよう!

while/do…while命令とは

if命令やswitch命令などの条件分岐と並んで、よく利用されるのが繰り返し処理(反復処理)です。

繰り返し処理には、whiledo…whileforfor…infor…of命令など、よく似た命令がいくつか存在します。

繰り返し構文-while/do...while/for/for...in/for...of-

whiledo…while命令は、あらかじめ与えられた条件式が、true(真)である間、ループを繰り返します。

whiledo…while命令の構文は次の通りです。

while/do…while命令

while (condition) {
  ...statements... 
}
do {
  ...statements...
} while (condition);
condition    条件式
statements   条件式がtrueの間、繰り返す命令(群)

do…while命令の末尾には、文の終了を表すセミコロンが必要である点に注意してください。

while/do…while命令を使ったサンプルコード

それぞれの命令を利用したコードを見てみましょう。

//while命令の場合
let x = 8;

while (x < 10) {
  console.log('xの値は' + x);
  x++;
}
//結果:「xの値は8」「xの値は9」を順に表示
//do...while命令の場合
let x = 8;
	
do {
  console.log('xの値は' + x);
  x++;
} while (x < 10);
	
//結果:「xの値は8」「xの値は9」を順に表示

一見して、いずれも同じ挙動を示すように見えますが、条件式が最初からfalseの場合の結果が異なります。

上の例であれば、変数xの初期値を10に書き換えてみましょう。

すると、while命令の場合は何も表示されませんが、do...while命令の場合は「xの値は10」というメッセージが1回だけ表示されることが確認できます。

//while命令の場合
let x = 10;

while (x < 10) {
  console.log('xの値は' + x);
  x++;
}
//結果:(何も表示されない)
//do...while命令の場合
let x = 10;
	
do {
  console.log('xの値は' + x);
  x++;
} while (x < 10);
	
//結果:「xの値は10」が1回だけ表示される

これは、while命令が条件式を最初に評価するのに対して(前置判定)、do...while命令はブロックの最後で評価するためです。(後置判定

つまり、do...while命令は条件式の真偽に関わらず、必ず1回はブロックを実行するということです。

whileとdo...whileの違い

無限ループとは

永遠に終了しない(=終了条件がtrueにならない)ループのことを無限ループといいます。

たとえば、次のサンプルコードから「x++;」という記述を削除、またはコメントアウトしてみましょう。

//while命令の場合
let x = 8;

while (x < 10) {
  console.log('xの値は' + x);
  //x++;
}
//結果:(無限ループする)
//do...while命令の場合
let x = 8;
	
do {
  console.log('xの値は' + x);
  //x++;
} while (x < 10);
	
//結果:(無限ループする)

xの値は8」という文字列が表示され続け、応答がなくなってしまうはずです。

ループの終了条件は、「x < 10」がfalseになること、つまり、変数xが10以上になることです。

しかし、「x++;」という1文を取り除いたことで、変数xが初期値のまま変化せず、ループが終了できなくなってしまったのです。

無限ループ

このような無限ループは、ブラウザーに極端な負荷を与え、フリーズさせる原因にもなります。

繰り返し処理を記述する場合には、まずループが正しく終了するかどうかをあらかじめ確認してください。

MEMO
ーわざと無限ループを作る場合もあるー
プログラミングのテクニックとして、意図的に無限ループを作り出す場合もあります。

しかし、その場合も必ずループ脱出ルートは確保しておくべきです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です