次のループ間の一般的な差別化要因:
while (condition) {action}
do {action} while (condition)
前者は0回以上発生するループに使用され、後者は1回以上発生するループに使用されます。
つまり、条件 forwhile
はループの開始時にチェックされ、 for はループdo while
の最後にチェックされます。
多くの場合、開発者が書いていることを知らないように見えるコードが表示されdo-while
ます。
result = doSomething();
while (result == NOT_FINISHED) {
result = doSomething();
}
これは次のように書くとよいでしょう:
do {
result = doSomething();
} while (result == NOT_FINISHED);
ただし、条件が常にある特定のケースでは、true
実際には問題になりません。次のループは基本的に同等です (1
真の場合を使用)。
for (;;) { doSomething(); }
for (;;doSomething());
while (1) { doSomething(); }
do { doSomething(); } while (1);
while (doSomething(),1);
BADPAX: doSomething(); goto BADPAX;
最初のfor
ループは、ループの継続条件を省略すると、それが常に true であると見なされるという事実を利用して、おそらく無限ループを実行する標準的な方法です。
2 番目のfor
ループは、ループ本体をfor
ステートメントの反復ごとの部分に移動するだけです。
最初のwhile
ものは野生で見られることもありますが、do-while
おそらくそうではありません。ここでの唯一の違いは、前者はループの一番上でチェックを永久にループし、後者はループの一番下でチェックを永久にループすることです。
最後のwhile
ループでは、C のコンマ演算子を、おそらく絶対にすべきではない方法で使用しています :-)
最後の 1 つは、最近では非常にまれですが、おそらくマシン コード レベルで最適化されたものです。