Управление циклами: break, continue, метки

🔄 Управление циклами: break, continue, метки

Циклы — это мощный инструмент JavaScript, но иногда стандартного поведения недостаточно. Давайте разберёмся, как управлять их работой с помощью break, continue и меток.


🛑 Оператор break: экстренная остановка

break мгновенно прерывает выполнение цикла. Это как кнопка «Стоп» в микроволновке — не ждёт окончания программы, останавливает прямо сейчас.

Пример с while:

let i = 0;
while (i < 10) {
  if (i === 5) {
    break; // Выходим из цикла при i = 5
  }
  console.log(i);
  i++;
}
// Выведет: 0, 1, 2, 3, 4

Пример с for:

for (let j = 0; j < 10; j++) {
  if (j > 3 && j % 2 === 0) {
    break; // Выходим при первой чётной цифре после 3
  }
  console.log(j);
}
// Выведет: 0, 1, 2, 3, 4

💡 break особенно полезен при поиске элемента в массиве — как только нашли, можно прервать цикл и сэкономить ресурсы.


⏭️ Оператор continue: пропуск итерации

continue не прерывает цикл полностью, а пропускает текущую итерацию. Представьте, что вы перепрыгиваете через ступеньку на лестнице.

for (let k = 0; k < 10; k++) {
  if (k % 2 === 0) {
    continue; // Пропускаем чётные числа
  }
  console.log(k);
}
// Выведет: 1, 3, 5, 7, 9

Реальный кейс: фильтрация данных перед обработкой:

const users = ['Аня', null, 'Петя', undefined, 'Маша'];

for (let user of users) {
  if (!user) continue; // Пропускаем пустые значения
  console.log(`Привет, ${user}!`);
}

🏷️ Метки: управление вложенными циклами

Метки (labels) позволяют управлять внешними циклами изнутри вложенных. Это как GPS-навигатор для break и continue.

Синтаксис:

имяМетки: for (...) {
  // ...
}

Пример с break:

outerLoop: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (i === 1 && j === 1) {
      break outerLoop; // Выходим из обоих циклов
    }
    console.log(`i=${i}, j=${j}`);
  }
}

Пример с continue:

matrixLoop: for (let row = 0; row < 3; row++) {
  for (let col = 0; col < 3; col++) {
    if (row === col) {
      continue matrixLoop; // Пропускаем диагональ
    }
    console.log(`Обрабатываем [${row}][${col}]`);
  }
}

⚠️ Метки используются редко, но в сложных алгоритмах (например, обработка матриц) могут быть спасителями.


🛠️ Практические примеры

1. Поиск простых чисел

nextPrime: for (let num = 2; num < 10; num++) {
  for (let div = 2; div < num; div++) {
    if (num % div === 0) {
      continue nextPrime; // Не простое — переходим к следующему числу
    }
  }
  console.log(`${num} — простое число!`);
}

2. Выход из глубокой вложенности

mainLoop: while (true) {
  const input = prompt('Введите "выход", чтобы закончить');

  if (input === 'выход') {
    break mainLoop;
  }

  // Другие операции...
}

❓ Частые ошибки

1. Путаница между break и continue:

  • break — полный выход
  • continue — пропуск текущей итерации

2. Метки только для циклов:

label: {
   break label; // Работает
   console.log('Это не выполнится');
}

3. Использование break в switch:

  • В switch break прерывает только текущий case, а не окружающий цикл.

🎯 Итоги

1. break — мгновенный выход из цикла

2. continue — пропуск текущей итерации

3. Метки — управление вложенными циклами

4. Используйте их для:

  • Оптимизации производительности
  • Упрощения сложной логики
  • Гибкого управления потоком выполнения
Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty