PL/I(PL/1)とJavaの do-while ループの挙動にはいくつかの違いがあります。それぞれの構文と挙動を比較してみましょう。
PL/I の DO WHILE ループ
PL/I では、DO WHILE ループは条件を満たしている間、繰り返し処理を実行しますが、少し Java とは異なる点があります。
構文
DO WHILE (条件);
/* 繰り返し処理 */
END;
PL/Iのポイント
DO WHILE は事前条件チェックのループ(Javaの while に相当)。
必ず1回実行される保証はない(最初に 条件 が FALSE なら、1度も実行されない)。
例
DECLARE I FIXED BINARY;
I = 1;
DO WHILE (I <= 5);
PUT SKIP LIST('I = ' || I);
I = I + 1;
END;
このコードは、I が 1 から 5 まで増加する間、出力を行います。
PL/I の DO UNTIL(Java の do-while 相当)
PL/I で Java の do-while と同じ必ず1回は実行されるループを使う場合、DO UNTIL を使用します。
DO UNTIL (条件);
/* 繰り返し処理 */
END;
例
DECLARE I FIXED BINARY;
I = 1;
DO UNTIL (I > 5);
PUT SKIP LIST('I = ' || I);
I = I + 1;
END;
このコードは I が 6 になるまで実行されるので、少なくとも 1 回は必ず処理されます。
Java の do-while ループ
Java の do-while ループは、少なくとも 1 回は実行されることが保証されています。
構文
do {
// 繰り返し処理
} while (条件);
Javaのポイント
do の中の処理は最低1回は必ず実行される。
ループの最後で while (条件) を評価するため、条件が false でも 1 回は実行される。
例
int i = 1;
do {
System.out.println("I = " + i);
i++;
} while (i <= 5);
このコードも I = 1 から 5 まで出力しますが、i = 10 から開始した場合でも 1 回は必ず実行される という違いがあります。
PL/I と Java の do-while の比較
言語
ループの種類
実行保証
ループ継続条件の評価タイミング
構文
PL/I
DO WHILE
なし(条件が false なら 0 回)
ループの前
DO WHILE (条件); ... END;
PL/I
DO UNTIL
あり(最低 1 回実行)
ループの後
DO UNTIL (条件); ... END;
Java
while
なし(条件が false なら 0 回)
ループの前
while (条件) { ... }
Java
do-while
あり(最低 1 回実行)
ループの後
do { ... } while (条件);
まとめ
PL/I の DO WHILE は 事前条件チェック なので、Java の while に近い。
Java の do-while に相当するのは PL/I の DO UNTIL。
Java の do-while は 最低 1 回は実行される 仕様なので、PL/I の DO WHILE とは異なる。