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

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

Использование фигурных скобок для создания блоков в операторах switch и case

Если мы создадим блоки в операторах switch и case, мы сможем заключить переменные в области видимости блока.

Итак, вместо того, чтобы писать:

switch (foo) {
  case 1:
    let x = 1;
    break;
  case 2:
    const y = 2;
    break;
    //...
}

Мы можем написать:

switch (foo) {
  case 1: {
    let x = 1;
    break;
  }
  case 2: {
    let x = 2;
    break;
  }
  //...
}

Мы можем использовать x дважды, поскольку x недоступен за пределами блока case.

Тернеры не должны быть гнездовыми

Тернарные выражения не должны быть вложенными, поскольку их трудно читать.

Они тоже должны быть короткими.

Например, вместо написания:

const foo = val1 === val2 ?
  "foo" :
  val3 > val4 ? "baz" : null;

Как мы видим, это сложно понять.

Поэтому вместо этого мы должны написать следующее:

const foo = val1 === val2 ?
  "foo" : "baz";

Избегайте бесполезных тернарных выражений

У нас не должно быть бесполезных тернарных выражений.

Например, не требуется следующее:

const baz = c ? false : true;

Если c является логическим, мы можем просто присвоить его напрямую baz.

Если это не так, мы можем использовать функцию Boolean, чтобы преобразовать его в логическое значение.

Итак, мы можем написать:

const baz = !Boolean(c);

вместо.

Замкнутые выражения со смешанными операторами в круглых скобках

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

Например, мы не должны писать:

const foo = a && b < 5 || c < 3 || d + 1 === 0;

Вместо этого мы должны написать:

const foo = ((a && b < 5) || (c < 3) || (d + 1)) === 0;

Теперь мы можем ясно видеть выражения, поскольку они разделены круглыми скобками.

Блоки

При создании блоков необходимо учитывать некоторые моменты.

Используйте фигурные скобки с многострочными блоками

Если у нас есть блоки, мы должны поставить скобки, нужны они или нет.

Например, вместо написания:

if (test)
  return true;

Мы пишем:

if (test) {
  return true;
}

Точно так же с функциями вместо записи:

function foo() { return true; }

Мы пишем:

function foo() { 
  return true; 
}

Если мы используем многострочные блоки с if и else, поместите else в ту же строку с закрывающей скобкой блока if

Например, вместо написания:

if (test) {
  foo();
  bar();
}
else {
  baz();
}

Мы пишем:

if (test) {
  foo();
  bar();
} else {
  baz();
}

Это экономит место, не влияя на удобочитаемость.

Если блок if всегда запускает оператор return, последующий блок else не нужен

Если у нас есть блок if, который всегда возвращается, то блок else никогда не будет запущен.

Следовательно, мы должны удалить блок else и поместить return за его пределы.

Например, вместо написания:

const foo = () => {
  if (x) {
    return x;
  } else {
    return y;
  }
}

Мы пишем:

const foo = () => {
  if (x) {
    return x;
  }
  return y;
}

Контрольные заявления

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

Если наши контрольные утверждения слишком длинные, тогда каждое условие должно быть в новой строке

Например, если у нас есть:

if ((foo === 123 || bar === 'abc') && suprSuperSuperLong() && isSuprSuperSuperLong()) {
  doSomething();
}

Затем мы должны привести его в порядок, написав:

if (
  (foo === 123 || bar === 'abc') &&
  suprSuperSuperLong() &&
  isSuprSuperSuperLong()
) {
  doSomething();
}

Это намного легче читать, чем первый пример.

Отсутствие оператора выбора вместо контрольных заявлений

Использование if легче понять, чем использование оператора && для запуска чего-либо, если условие равно true.

Например, вместо написания:

canRun && run();

Мы пишем:

if (canRun) {
  run();
}

Заключение

Мы должны заключить операторы swiotchj и case в фигурные скобки, чтобы мы могли использовать с ними переменные с блочной областью видимости.

Если у нас длинные логические выражения, мы должны разбить их на отдельную строку.