Правильный способ вырваться из блока if в JavaScript? - PullRequest
3 голосов
/ 14 июня 2019

В структуре блока if, такой как ниже, предположим, что условие_1 и условие_2 являются взаимоисключающими, но бывают ситуации, когда условие_2 и более поздние условия могут быть истинными; и, когда условие_2 истинно, все, что нужно, - это выйти из блока if и продолжить с остальным кодом, аналогично оператору switch.

Все условия, кроме condition_2, являются matches операторами для слушателя в родительском контейнере с несколькими кнопками. Когда условие_2 истинно, кнопки под ним должны быть отключены.

if ( condition_1 ) { }
else if ( condition_2 ) {  }
else if ( condition_3 ) {  }
else if ( condition_4 ) {  }
// ...
else if ( condition_n ) {  };   
// More code in the function before returning.

Это может быть закодировано как:

if ( condition_1 ) { }
else if ( !condition_2 && condition_3 ) {  }
else if ( !condition_2 && condition_4 ) {  }
// ...
else if ( !condition_2 && condition_n ) {  };   
// More code in the function before returning.

или

if ( condition_1 ) { }
else if ( !condition_2 )
  {
    if ( condition_3 ) {  }
    else if ( condition_4 ) {  }
    // ...
    else if ( condition_n ) {  };   
  };
// More code in the function before returning.

Было бы "плохой" практикой программирования просто кодировать, как в первом блоке, и просто не помещать код между фигурными скобками для condition_2, чтобы при условии, что condition_2 имеет значение true, нет кода для выполнения, но другие условия не проверяются и он берет код в конце блока if?

Есть ли лучший, более профессиональный способ сделать то же самое?

Я читал о том, как поместить label в оператор if, а затем использовать break label, но я не вижу, что это добавляет; и было упомянуто, что этот метод не может быть эффективно использован компилятором / интерпретатором.

Спасибо.

1 Ответ

5 голосов
/ 14 июня 2019

Вы можете взять помеченный оператор и нарушить оператор block {}, если условие true.

var a = 2;
block: {
    if (a === 1) {
        console.log(1);
        break block;
    }
    if (a === 2) {
        console.log(2);
        break block;
    }
    if (a === 3) {
        console.log(3);
        break block;
    }
    console.log('end of block');
}

Или возьмите другую вложенную функцию в той же области и верните ее раньше.

function check () {
    if (a === 1) {
        console.log(1);
        return;
    }
    if (a === 2) {
        console.log(2);
        return;
    }
    if (a === 3) {
        console.log(3);
        return;
    }
    console.log('end of function');
}

var a = 2;
check();
...