Каков самый чистый способ ветвления, основанный на том, какой условный цикл прервал время в Javascript? - PullRequest
0 голосов
/ 19 ноября 2010

Скажи, что у меня есть этот цикл

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

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

Это может быть нарушено, если любое из 4 условий станет ложным, и я хотел бы выполнить другой код, в зависимости от того, какое из них было. В идеале я не хотел бы оценивать их все больше, чем мне абсолютно необходимо. Предположим, browseReddit() заставляет нас снова оценить их все.

Помещение цепочки if после цикла - вот как я это делаю в настоящее время. Есть ли более чистый способ? Оцените краткость превыше всего в вашем ответе.

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010
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();
}
1 голос
/ 19 ноября 2010

Окончательное редактирование:

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 голосов
/ 19 ноября 2010

Я бы пошел по тому же принципу, что и в текущем примере кода, чтобы вы не освобождали себя от тестирования всех четырех случаев выхода.

...