Вопрос по компиляции Javascript: развертывание операторов IF в операторах SWITCH-CASE - PullRequest
0 голосов
/ 09 ноября 2018

Я использую операторы регистра переключателей в течение многих лет, когда вижу ситуацию, когда ряд необходимых операторов if и else может сделать код менее читабельным. Например, случай развернутого переключателя выглядит так:

switch (true) {
  case compoundBooleanExpression1:
    handler1();
    break;
  case compoundBooleanExpression1:
    handler2();
    break;
  default:
    defaultHandler;
}

Ожидается, что, как и серия операторов if, выражения будут оцениваться последовательно по порядку, пока не будет найдено совпадение, а затем обработчик. Я пытаюсь следовать тому же соглашению, как будто - каждое выражение оценивается как истинное. В некоторых ситуациях это делает код более читабельным - сходства или симметрии в выражениях выстраиваются лучше.

При сравнении того, как c / c ++ и другие скомпилированные языки обрабатывают switch-case, выясняется, что скомпилированные языки во время выполнения сведут выражения в выражениях case в таблицы хранения. Он хранит их до оценки оператора. Поэтому для их хранения необходимо предварительно скомпилировать значения. Похоже, что все выражения будут оценены, что менее эффективно, чем вычислять только значения времени выполнения по мере необходимости.

Кто-нибудь знает, собираются ли компиляторы Javascript для браузера следовать предварительно скомпилированному подходу в будущем? Разве это не будет проблемой для Javascript? В идеале должен существовать способ заставить "&&" завершить работу на ранних этапах так, чтобы перед выходом из блока выполнялось только столько кода, сколько необходимо.

...