[解決済み] Javaでbreakを使ってループを抜けるのはバッドプラクティスですか?[クローズド]
質問
を使用するのはバッドプラクティスなのでしょうか?
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までループし続けるのか、それともアイテムを見つけるまでループして止めるのか?あるいは、現実の世界に置き換えてみると、鍵を見つけたとき、探し続けますか?
コメントへの返答として編集
なぜ
x
を
11
を使えばループが解除されるのか?無意味です。私たちは
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"))
関連
-
[解決済み] jQueryの各ループから抜け出すには?
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] C#のループ - breakとcontinue
-
[解決済み] なぜfinalize()を実装する必要があるのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
型に解決できない エラー解決
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
シェルコマンドやスクリプトのJavaコール
-
maven レポート エラー 解決不可能な親POM
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
Java基礎 - マッピングとQ/A
-
[解決済み] Javaでメソッドをブレイクアウトまたは終了するにはどうすればよいですか?