do..while文

広告

for文やwhile文ではまず条件式を評価してから1回目の繰り返しを行います。その為、場合によっては一度も繰り返し処理を行わないことがあります。それに対してまず繰り返しを一度行ってから条件式を評価したい場合に利用されるのがdo..while文です。書式は次の通りです。

do
  実行する文;
while (条件式);
do{
  実行する文1;
  実行する文2;
  ...
}while (条件式);

do..while文ではまず繰り返し処理を一回実行します。ブロックを使用することで複数の文を実行することも可能です(ブロックを使う場合は「{」から「}」の間に実行したい文を記述します)。その後で条件式を一度評価します。評価した結果としてtrueが返された場合には先頭に戻り改めて繰り返し処理を実行し、falseだった場合にはdo..while文を終了します。

for文やwhile文との大きな違いは必ず繰り返し処理が1度実行されることです。その他の点では基本的にdo..while文はwhile文と変わりがありません。またdo..while文の最後にセミコロンが必要な点も注意して下さい。

処理の流れ

では簡単な例を使い処理の流れを確認してみます。

var i = 7;

do{
  alert("i = " + i);
  i -= 4;
}while(i < 0);

この場合は次のような処理の流れとなります。

 1)変数「i」を宣言し初期値の「7」を代入

 2)「i = 7」を画面に出力
 3)i -= 4;
 4)条件式を評価。iは0よりも大きいので繰り返しを実行

 5)「i = 3」を画面に出力
 6)i -= 4;
 7)条件式を評価。iは0より大きくないので繰り返しを終了

do..while文ではまず最初に繰り返し処理が1回実行されます。そして1回目の条件式の評価を行います。trueなら再度繰り返しを行い、falseだった場合にはdo..while文の次の文へ処理が移ります。

ではwhile文を使って同じ動作をするスクリプトを作成してみます。

var i = 7;

alert("i = " + i);

while(i < 0){
  alert("i = " + i);
  i -= 4;
}

最初に評価をした時にfalseとなった場合でも必ず一度変数の値を画面に出力させるには、while文の前に一度画面に出力する文を実行しておく必要があることに注意して下さい。このようにdo..while文で記述できることは基本的にwhile文を使っても記述できますが、do..while文を使った方が簡潔に記述できる場合にdo..while文は使用します。

サンプルコード

では簡単なサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script7_1.js">
</script>

</body>
</html>
var num = 1;

document.write("<p>");

do{
  document.write("num = " + num + "<br />");
  num *= 3;
}while (num < 50);

document.write("</p>");

上記を実際にブラウザ見てみると次のように表示されます。

p7-1

( Written by Tatsuo Ikura )