2011-02-05 7 views
4

私はForとWhileステートメントに名前を付けることができたことを知りました。特定のループを中断したり続行したい場合に便利です。
しかし、なぜ私はIfに名前を付けるべきですか?これは、これはあなたが任意のステートメントのブロックの前にラベルを使用することができます問題なぜ私はIfステートメントに名前を付けるべきですか?

+0

お願いします!このパターンは使わないでください!このような後藤は悪いです! – Tazzy531

答えて

10

名前の付いたコードブロックをお持ちの場合は、それを終了するために使用することができます。これは、名前ブロックのために見つけた使用方法です。

 
name: if(true) { 
    // do something 
    if(/* condition */) { 
     break name; 
    } 
    // do more 
} 

場合、それはまたせずに動作します:いくつかのロジック上のガード条件のセット、およびに落下されるロジックの別のセットがある場合、これが私の仕事で起動します

 
name: { 
    // do something 
    if(/* condition */) { 
     break name; 
    } 
    // do more 
} 

ガードの結果にかかわらず。

別の構造を読み取って変更することがより困難である更なる例:

 
block: if(/* guard */) { 

    // prep work 

    if(/* guard */) { 
    break block; 
    } 

    // prep work 

    if(/* guard */) { 
    break block; 
    } 

    // real work 
} 

通常、私は裸のブロックを使用していない場合けれども。

+0

+1以前は見たことがありません。しかし、あなたが他のブロックで過去に壊したいコードを入れないと同じことが達成されますか? –

+0

しかし、フォーム(ガード、計算、ガード、計算、ガード、ワーク)はこのように読みやすくなります。 –

+0

私は個人的にはまだif-else構造を好むと思っていますが、今は新しい何かを学んでいます:-)。 –

6

なしでコンパイル

name: if(true){ 
    //do something 
} 

無用になります。これはおそらくループで最も一般的に使用されますが、他の場所では完全に有効です。

+0

+1、あなたの答えに追加するには、このリンクにいくつかの例があります:http://download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html –

+0

mmm okしかし、これは私の質問に答えません: Dには、ifという名前を付ける実用的な用途はありますか? – Oneiros

2

Sarah Happyの答えは実際にはループよりもコードブロックを壊すためにbreakを使うことができるということを示しているので、私の答えは正しいと思います。

確かにあなたがループの場合、しばらくの間で言ったように label、ある

。これは、他の場所で有効ですが、私はgotoが予約語ですが、あなたがは、Javaがないサポート後藤を使用

goto name; 

ないことはできませんが、それはラベルの形でそれをサポートすることを追加したいですbreakおよびcontinueと結合されたループ。

あなたのような、後藤が含まれるように、あなたのコードサンプルを拡大した場合:

name: if(true){ 
    //do something 
    } 
goto name; 

あなたのラベルでcontinueを使用しようとした場合は、代わりに両方illegal start of expressionnot a statement

を言って、エラーを取得したいですしかし、ループせずに、同じよう:

name: if(true){ 
    //do something 
    } 
continue name; 

あなたはundefined label: name

を取得したいです

コンパイラに関して言えば、ループのないラベルは大丈夫ですが、ループなしでは無駄になります。

+0

大丈夫ですので、無駄です:Dありがとうございます。+1 – Oneiros

+0

ネストループのマルチレベルブレークと同じ用途があります。 –

+0

@Oneiros:いいえ、役に立たないわけではありません。この答えは間違っているようです - サラの答えを見てください。 – Mehrdad

0

ループを壊すように、戻るかif文の方にジャンプしたいと思うかもしれません。これについて考え始めるときはいつでも、代わりに新しいメソッドを作成してみてください。

関連する問題