Инструкции и блоки кода в JavaScript

Инструкции и блоки кода в JavaScript

Технический фундамент управления потоком

Инструкции и блоки формируют управляемый поток выполнения:

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

Эта дисциплина критична в прод-коде, где условия растут и меняются со временем.

Зачем понимать инструкции и блоки

Когда код начинает ветвиться, недостаточно просто "знать синтаксис". Нужно понимать, какие строки образуют одно действие, где начинается и заканчивается ветка условия, и почему одни инструкции выполняются, а другие нет. Именно для этого нужны инструкции и блоки кода.

Ключевой момент: блок { ... } задает границы выполнения логики.

Проверь себя: почему отсутствие фигурных скобок может незаметно изменить поведение if?

Что такое инструкция

Инструкция - это законченная команда для движка JavaScript.

const isActive = true;
console.log(isActive);

Обе строки выше - отдельные инструкции.

Инструкция может быть простой (объявить переменную) или составной (условие, цикл, функция).

Что такое блок кода

Блок кода - это группа инструкций внутри {}.

if (true) {
  const status = 'active';
  console.log(status);
}

Здесь внутри if две инструкции, и обе выполняются только если условие истинно.

Смотри, что важно: блок помогает связать несколько шагов в один логический сценарий.

Почему скобки критичны даже для "одной строки"

Технически можно писать if без скобок, если инструкция одна:

if (isActive) console.log('active');

Но это опасно для поддержки: добавил вторую строку - и она может оказаться уже вне if.

if (isActive)
  console.log('active');
  console.log('this line always runs');

Здесь часто путаются: визуально кажется, что обе строки в условии, но реально - только первая.

Анти-провал: используй {} всегда, даже для коротких веток.

Еще один подводный камень без {}: else привязывается к ближайшему if, а не к тому, который "выглядит главным" по отступам.

const isAuth = true;
const isAdmin = false;

if (isAuth)
  if (isAdmin)
    console.log('admin panel');
  else
    console.log('user panel'); // этот else относится к isAdmin

Если оборачиваешь ветки в {}, привязка else становится явной, и код гораздо сложнее неправильно прочитать.

Инструкция vs выражение

Выражение вычисляется в значение.

const score = 80;
const passed = score >= 70; // выражение -> true

Инструкция выполняет действие.

console.log(passed); // инструкция

Понимание этой разницы важно, чтобы не путать "что считает" и "что делает" код.

Проверь себя: score >= 70 - это инструкция или выражение?

Вложенные блоки

Блоки можно вкладывать друг в друга.

const isAuth = true;
const isAdmin = false;

if (isAuth) {
  if (isAdmin) {
    console.log('admin panel');
  } else {
    console.log('user panel');
  }
}

Это типичный сценарий доступа к экрану в приложении.

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

Мини-сценарий: состояние экрана

Допустим, у тебя экран может быть:

  • blocked;
  • auth-required;
  • full;
  • limited.

Приоритет условий должен быть строгим и читаемым.

const isBlocked = false;
const isAuth = true;

let screen = 'limited';

if (isBlocked) {
  screen = 'blocked';
} else if (!isAuth) {
  screen = 'auth-required';
} else {
  screen = 'full';
}

console.log(screen); // full

Если перепутать порядок инструкций, можно показать неверный экран при тех же данных.

Частые ошибки новичков

  • Писать условные ветки без скобок.
  • Путать отступы и реальные границы блока.
  • Смешивать много логики в одном if без промежуточных переменных.
  • Нарушать приоритет проверок (blocked должен быть раньше прочих состояний).

Проверь себя: почему в состоянии с блокировкой проверка isBlocked должна стоять первой?

Что будет, если изменить входные данные

Если isAuth = false, в примере с доступом сработает ветка auth-required. Если isBlocked = true, правильная логика должна вернуть blocked независимо от остальных флагов. Это и есть ценность четких блоков: предсказуемое поведение на всех входах.

Краткий итог

  • Инструкция - отдельная команда выполнения, блок - группа команд в {}.
  • Блоки задают границы веток и напрямую влияют на поведение кода.
  • Фигурные скобки лучше использовать всегда для надежности и читаемости.
  • Порядок блоков условий должен отражать бизнес-приоритет.
  • Четкая структура блоков уменьшает скрытые баги и ускоряет отладку.