1. ホーム
  2. while-loop

while (true) with breakはプログラミングの悪しき習慣か?

2023-11-18 08:18:10

質問

このコードパターンをよく使います。

while(true) {

    //do something

    if(<some condition>) {
        break;
    }

}   

別のプログラマは、これは悪い習慣なので、もっと標準的なものに置き換えるべきだと教えてくれました。

while(!<some condition>) {

    //do something

}   

彼の理由は、あまりにも簡単に break" を忘れてしまい、無限ループになる可能性があるということでした。私は彼に、2 番目の例では、決して true を返さない条件を置くことができ、同様に簡単に無限ループになるため、どちらも同様に有効なプラクティスであると言いました。

さらに、私はしばしば前者を好みます。複数のブレークポイント、すなわちループから抜け出す複数の条件があるときに、コードを読みやすくなるからです。

誰か、どちらかの側の証拠を追加することによって、この議論を豊かにすることができますか?

どのように解決するのですか?

2つの例の間には食い違いがあります。1 つ目の例では、ステートメントが決して true にならない場合でも、毎回少なくとも 1 回は "do something" が実行されます。2 番目の例では、ステートメントが true と評価されたときのみ "do something" が実行されます。

あなたが探しているものは、do-while ループだと思います。私は、以下のことに100%同意します。 while (true) は良いアイデアではありません。なぜなら、このコードを保守するのが難しくなり、ループをエスケープする方法は非常に goto 的であり、バッドプラクティスと考えられています。

試してみてください。

do {
  //do something
} while (!something);

正確な構文については、各言語のドキュメントを確認してください。しかし、このコードを見てください、それは基本的にdoの中にあるものを行い、そしてそれを再び行うべきかどうかを確認するためにwhileの部分をチェックします。