2010-11-19 2 views
0

はそれがあった私は、このループJavascriptでwhileループを壊した条件に基づいてブランチする最もクリーンな方法は何ですか?

while(condition1 && condition2 && condition3 && condition4){ 
    browseReddit(); 
} 

if (!condition1){} 
if (!condition2){} 
if (!condition3){} 
if (!condition4){} 

を持ってそれが偽になって4つの条件のいずれかによって破壊することができ、私はその1(S)に基づいて、異なるコードを実行したいと言います。理想的には、絶対に必要以上に評価するのは嫌です。 browseReddit()と仮定すると、それらをすべて再評価する必要があります。

ループの後にifチェーンを配置する方法は、現在どのように行っているかです。よりクリーンな方法がありますか?あなたの答えのなかで他の何よりも簡潔さを重視します。

+2

は、なぜあなたはそれが最も効率的な方法ではないと思いますか?あなたは何を達成しようとしていますか?もっと短いやり方をしたいだけですか?あなたは三項式を使うことができます。 – jcolebrand

+2

ループが途切れて、condition1とcondition2の両方がfalseの場合はどうなりますか?両方に対処したいですか?現時点では、コードでは条件1が失敗するだけです。それらを入れ子にしたくないかもしれず、代わりに4つのif-endを使うだけです。 – david

+0

@ david私は各ケースを扱いたいので、それは4 if-endsだったはずです。編集されました。 – Nathan

答えて

2
while (1) { 
    stop = 0; 
    if (!condition1) { 
     // condition 1 code 
     stop = 1; 
    } 
    if (!condition2) { 
     // condition 2 code 
     stop = 1; 
    } 
    if (!condition3) { 
     // condition 3 code 
     stop = 1; 
    } 
    if (!condition4) { 
     // condition 4 code 
     stop = 1; 
    } 
    if (stop) { 
     break; 
    } 
    browseReddit(); 
} 
+0

私はそれを考え出すことができたと思う。 _feels dumb_ – Nathan

+0

彼は自分のリスト内にそのコードをネストしたくないかもしれません。 – jcolebrand

+0

@ジョン:質問を編集した後、答えを編集しました。 –

0

あなたの現在のコードサンプルにあるように、4つの終了ケースすべてをテストすることは免除されません。

1

最終編集:

while((condition1||function(){alert("condition1 failed!");}()) & 
     (condition2||function(){alert("condition2 failed!");}()) & 
     (condition3||function(){alert("condition3 failed!");}()) & 
     (condition4||function(){alert("condition4 failed!");}())){ 
    browseReddit(); 
} 

jsfiddle:http://jsfiddle.net/ctrlfrk/HjftT/3/

+0

私はすべてのjavascriptエンジンが短絡式をしたとは思わなかった – jcolebrand

+0

これは仕様に書かれているはずです。それが今実際に動作するように修正しました。http://jsfiddle.net/ctrlfrk/HjftT/ – david

+0

これは私が完了したと思います。これは条件の最小回数を評価し、複数の失敗も処理すると思います。あなたの匿名関数が真を返さないように注意する必要があります。 – david

関連する問題