1. ホーム
  2. java

[解決済み] Javaでbreakを使ってループを抜けるのはバッドプラクティスですか?[クローズド]

2023-06-23 13:56:56

質問

を使用するのはバッドプラクティスなのでしょうか? break ステートメントを使用してループ条件を満たす代わりにループを終了することは悪い習慣なのでしょうか?

私は、ループがどのように処理されるかを知るためにJavaとJVMについて十分な洞察力を持っていないので、そうすることによって何か重大なことを見落としているのではないかと思っていました。

この質問の焦点:特定のパフォーマンスのオーバーヘッドがあるか?

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

なんということでしょう。論理的なループ条件を満たさなくても、全体の要件を満たすようなことがループ内で発生する可能性があることがあります。その場合は break が使用され、ループを無意味に循環させないようにします。

String item;

for(int x = 0; x < 10; x++)
{
    // Linear search.
    if(array[x].equals("Item I am looking for"))
    {
       //you've found the item. Let's stop.
       item = array[x];
       break; 
    }
}

この例では、どちらがより理にかなっているでしょうか。見つけた後も毎回10までループし続けるのか、それともアイテムを見つけるまでループして止めるのか?あるいは、現実の世界に置き換えてみると、鍵を見つけたとき、探し続けますか?

コメントへの返答として編集

なぜ x11 を使えばループが解除されるのか?無意味です。私たちは break ! という仮定をしているのでなければ、あなたのコードは x よりも確実に大きいという前提がなければ 10 よりも確実に大きくなる (そしておそらくそうすべきではない) ならば、単に break .

完全性のために編集する

をシミュレートする他の方法があるのは確かです。 break . 例えば、ループの終了条件に余分なロジックを追加することです。無意味にループさせるか、あるいは break を使うというのはフェアではありません。指摘されているように、whileループでも同様の機能を実現できることが多い。例えば、上記の例のように...

while(x < 10 && item == null)
{
    if(array[x].equals("Item I am looking for"))
    {
        item = array[x];
    }

    x++;
}

使用方法 break を使うことは、この機能を for ループで実現できることを意味します。また、ループの振る舞いを変えたいときに、終了ロジックに条件を追加し続ける必要がないことも意味します。例えば

for(int x = 0; x < 10; x++)
{
   if(array[x].equals("Something that will make me want to cancel"))
   {
       break;
   }
   else if(array[x].equals("Something else that will make me want to cancel"))
   {
       break;
   }
   else if(array[x].equals("This is what I want"))
   {
       item = array[x];
   }
}

よりも、むしろ while loop のような終了条件付きで

while(x < 10 && !array[x].equals("Something that will make me want to cancel") && 
                !array[x].equals("Something else that will make me want to cancel"))