Условные операторы в JavaScript

my %score_lookup;
{
   my $found_header = 0;
   my @col_ids;
   while (<>) {
      next if /^#/;

      if ($found_header) {
         my ($row_id, @fields) = split;
         for my $i (0..$#fields) {
            my $col_id = $col_ids[$i];
            my $score = $fields[$i];
            $score_lookup{ $row_id . $col_id } = $score;
         }
      } else {
         $found_header = 1;
         @col_ids = split;
      }
   }
}

my $score = $score_lookup{ "A" . "R" };   # -2
18
задан RichieHindle 15 May 2009 в 17:11
поделиться

5 ответов

Условные операторы намеренно лаконичны и особенно полезны для присваиваний:

var a = x ? 1 : 2;

Использование их для условного запуска функций, хотя и возможно, для удобства чтения должно выполняться с помощью операторов IF / ELSE:

// This is possible but IMO not best practice:
X ? doSomething() : doSomethingElse();

Хотя это и многословно, в большинстве случаев это лучшее решение:

if (X) {
    doSomething();
} else {
    doSomethingElse();
}

Одно из заметных преимуществ структуры IF / ELSE состоит в том, что вы можете добавлять дополнительные задачи при каждом условии с минимальными трудностями.

Ваш последний фрагмент также возможен, но он выглядит несколько длинным и, опять же, может лучше подходить для более традиционной логической структуры; как блок IF / ELSE.

Тем не менее, условный оператор все еще может быть читаемым, например

(something && somethingElse > 2) ?
   doSomeLongFunctionName()
   : doSomeOtherLongFunctionName();

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

25
ответ дан 30 November 2019 в 07:23
поделиться

JavaScript не помешает вам сделать это, но это очень необычная практика, которая запутает любого, кто читает ваш код.

Условный оператор почти всегда используется для выбора двух альтернативных значений, не заявления. Оператор if предпочтительнее для условного ветвления операторов.

Что касается вашего последнего вопроса, да, если вам действительно необходимо, вы можете злоупотребить конструкцией [] :

(x == y) ? [alert("yo!"), document.write("woot!")] : otherstuff();

Но, пожалуйста, не , 8 -)

4
ответ дан 30 November 2019 в 07:23
поделиться

Любой из двух методов приемлем, хотя вы могли бы также написать:

alert((x == y) ? "yo!" : "meh!");

Помимо этого, я бы никогда не рекомендовал использовать встроенные условные выражения для многострочных операторов, просто используйте стандартный блок if / else , Учитывая, что введенный вами синтаксис также не является допустимым JS, вы могли бы поместить несколько операторов в анонимные методы и yada yada, тогда вы попадаете в запутанный беспорядок почти неуправляемого и излишне сложного кода. Итак, снова стандартное if / else.

2
ответ дан 30 November 2019 в 07:23
поделиться

Это полностью зависит от вас, вы можете сделать это в любом случае. Однако вам просто нужно спросить себя, соответствует ли этот стиль рекомендациям компании и насколько удобочитаемым должен быть этот код?

Использование операторов if более читабельно.

Лично я использую только тернарный оператор для простые и быстрые условия истина / ложь - где это имеет смысл - или где мне нужно что-то «встроенное».

4
ответ дан 30 November 2019 в 07:23
поделиться

Я согласен и с Крисом, и с JP в том, что:

  1. Условные операторы удобны для коротких операторов. Назначение переменной JP - отличный пример: var a = x? 1: 2;
  2. Многострочные предложения должны быть разделены на отдельные строки для удобства чтения.
  3. Условные операторы можно сделать читаемыми как многострочные операторы с правильным отступом, но if / else синтаксис гораздо более знакома большинству разработчиков. Удобочитаемость - это соответствие ожиданиям вашего читателя, поэтому знание важно.

Я добавлю, что многострочные условные операторы оставляют вас уязвимыми для ошибок при вставке точки с запятой. Обратитесь к документации JSLint (см. Раздел «Разрыв строки») для получения дополнительной информации. Если вам необходимо использовать многострочный условный оператор, убедитесь, что операторы находятся в конце каждой строки. Я бы переделал многострочный пример JP следующим образом:

(something && somethingElse > 2) ?
   doSomeLongFunctionName() :
   doSomeOtherLongFunctionName();

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

2
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: