3秒でわかる
先に本体を実行してから継続条件を判定するループ構文。入力の受け付けなど、最低 1 回は必ず動かしたい繰り返しを素直に書けます。
もう少し詳しく
どういうものか
do-while は、繰り返しの本体を先に実行し、その後で条件を判定するループです。判定が後ろにあるため、条件が最初から偽であっても本体は必ず 1 回実行されます。while との違いはこの 1 点だけです。
Java、C、C++、JavaScript で使えます。文末のセミコロンが必要な点に注意が要ります。Python には do-while が無いため、while True と break で同じ形を作ります。
なぜ必要か
「まず 1 回やってみて、結果を見て続けるか決める」処理は現実に多くあります。利用者に入力させてから妥当性を判定する、メニューを表示してから終了が選ばれたか確かめる、といった場面です。while で書くと、条件判定に必要な値をループの前でも取得することになり、同じコードが 2 か所に並びます。do-while ならその重複が消えます。
具体例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
do {
System.out.print("1 から 10 の数を入力 ");
number = sc.nextInt();
} while (number < 1 || number > 10);
System.out.println("受け付けました " + number);
}
}入力を受け取ってからでないと範囲を判定できないため、判定が後ろにある形が素直に当てはまります。
つまずきやすいところ
条件を書き間違えて無限ループになる事故が、while より起きやすくなります。判定が下にあると、本体の中で条件に使う変数を更新し忘れても目に付きにくいためです。上の例でも number = sc.nextInt(); を消せば永遠に終わりません。
もう 1 つは while (...) の後のセミコロンの付け忘れで、Java と C ではコンパイルエラーになります。逆に、通常の while の後ろに誤ってセミコロンを付けると、本体が空のループとして解釈され、エラーにならないまま固まります。
似た用語との違い
| 構文 | 判定の位置 | 最低実行回数 |
|---|---|---|
| while | 先頭 | 0 回 |
| do-while | 末尾 | 1 回 |
| for | 先頭 | 0 回 |
回数が決まっているなら for、条件次第で 0 回もありうるなら while、必ず 1 回は動かすなら do-while という選び方になります。
覚え方
「やってから考える」が do-while、「考えてからやる」が while です。