1

次の形式の for ループがあります。

for (int i = from; i < to; i++) {
  // do some code (I don't know exactly what, it is subject to change)
}

そして、それを while ループに変換したい (主にi、ループ内の値を操作して前後に移動したいため、同僚は for ループでこれを行うと問題が発生しやすいと考えているためです。彼に同意する)。だから私はこのようなものを書きました:

int i = from;
while (i < to) {
  try {
    // do some code (I don't know exactly what, it is subject to change)
  } finally {
    i++;
  }
}

これは、いくつかの大きなコメントを引き起こしました。私の推論は、ループ内のコードが何をするかわからないということです-複数のcontinueコマンドがある場合があります(そしてあります)。

応答として、彼は次のように書いています。

int i = from - 1;
while (++i < to) {
  // do some code (I don't know exactly what, it is subject to change)
}

行数が少ないことは確かですが、それでも私のコードはよりエレガントだと思います - どう思いますか?

4

6 に答える 6

5

ループ構造でインデックスの値をいじると、ループ構造が何であれ、問題が発生しやすくなります。

for ループか while ループかは問題ではありません。要点は、インデクサーが最終的にループ終了の決定を下すかどうかです。

自分がインデクサーであることが最終的に終了条件を達成させると確信している場合は、 for を使用するか a while を使用するかではなく、それだけに注意する必要があります。

于 2009-11-03T17:31:02.103 に答える
3

そして、それを while ループに変換したい (主に、ループ内で i の値を操作して前後に移動したいため、同僚は for ループでこれを行うと問題が発生しやすいと考えているためです。私は傾向があります。彼に同意する)。

これは、ほとんどの言語で完全に受け入れられます。for ループを避ける理由はありません。

于 2009-11-03T17:30:34.693 に答える
2

次のように変換する方が簡単で読みやすいように思えます。

while (condition == true) {
   // do stuff
   // set the condition flag appropriately
}

したがって、ループの終了を変数のインクリメントから分離します。

制限チェックを含むループ (例: i < limit) が見られる場合、(合理的に) 一貫した方法で変更されている変数があると想定する傾向があります。やりたいことをできない理由はありませんが、私はより読みやすく、より期待される動作に傾倒します。

于 2009-11-03T17:34:56.713 に答える
1

超強力な を使用して同じこと (およびそれ以上のこと) を実行できるのに、なぜばかげたループに煩わされるのgotoでしょうか?

i = fro;
my_loop:
//all your stuff here
i++;
if (i < to) goto my_loop;

あなたが を減少させる気弱なプログラマーの 1 人である場合はgoto、これを試すことができます。

i = fro;
while(1) {
    //your stuff here
    if (++i < to) break;
}
于 2009-11-03T17:38:50.557 に答える
0

これを行う最も簡単な方法は、以下のように while ループに変換しないことです。

for (int i = from; i < to; ) {
  // do some code (I don't know exactly what, it is subject to change)
  i += rand()*10;
}
于 2009-11-03T17:33:15.607 に答える
0

どのコードを選択するかという質問に答えるには; 私はあなたの長いコードを選びます。最初の(長い)ループを読むのはずっと簡単です。はい、私は 2 番目を読むことができますが、経験が豊富な場合でも、そのループが何をするかを知るために 2 回目を通す必要があります。さらに、コンパイラはコードを十分に最適化します。

于 2009-11-03T17:35:23.397 に答える