1. Оператор break: как остановить цикл досрочно
Порой в жизни (и в программах) приходится прервать дело на полпути, потому что цель уже достигнута, или, наоборот, пропустить ненужную часть работы. Вот тут и появляются на сцене наши сегодняшние герои — операторы break и continue.
- break — как стоп-кран в поезде: резко останавливает цикл, как только встречается в теле цикла. Всё, что дальше, не выполняется, и программа выскакивает из цикла наружу.
- continue — как кнопка "пропустить" на YouTube: мгновенно перескакивает к следующей итерации, не выполняя оставшийся код в текущем проходе цикла.
Давайте разберём их подробно, с примерами, шутками и типичными ошибками.
Синтаксис
for (let i = 0; i < 10; i++) {
if (условие) {
break;
}
// остальной код
}
Или в цикле while:
while (условие) {
if (другое_условие) {
break;
}
// остальной код
}
Пример 1: Поиск первого положительного числа в массиве
Допустим, у нас есть массив чисел, и нам нужно найти первое положительное число и вывести его. Как только нашли — дальше искать не нужно!
const numbers = [-3, -2, -1, 0, 4, 7, 10, -5];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] > 0) {
console.log("Первое положительное число:", numbers[i]);
break; // Дальше цикл не идёт, мы нашли, что искали!
}
}
Что происходит?
Цикл перебирает элементы массива. Как только встречается число больше нуля, срабатывает break — цикл сразу завершается.
Пример 2: Поиск индекса элемента
Пусть нам нужно найти индекс элемента со значением 42:
const arr = [10, 25, 42, 17, 8];
let foundIndex = -1;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === 42) {
foundIndex = i;
break;
}
}
console.log("Индекс элемента 42:", foundIndex); // 2
Если элемент не найден — переменная foundIndex останется -1.
Пример 3: Использование с циклом while
let i = 0;
while (i < numbers.length) {
if (numbers[i] === 0) {
console.log("Встретили ноль! Останавливаемся.");
break;
}
i++;
}
Вложенные циклы и break
break останавливает только тот цикл, в котором он написан!
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 1) break; // Выйдет только из внутреннего цикла!
console.log(`i=${i}, j=${j}`);
}
}
Вывод:
i=0, j=0
i=1, j=0
i=2, j=0
Как только j становится 1, внутренний цикл завершает текущий проход, но внешний продолжает работать.
2. Оператор continue: пропустить итерацию
Синтаксис
for (let i = 0; i < 10; i++) {
if (условие) {
continue;
}
// этот код выполняется только если не было continue
}
Пример 1: Пропуск чётных чисел
Допустим, надо вывести все нечётные числа массива:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) continue; // Пропускаем чётные числа
console.log(numbers[i]);
}
Результат:
1
3
5
7
9
Пример 2: Пропуск пустых строк
Пусть у нас массив строк, и мы хотим вывести только непустые:
const names = ["Аня", "", "Борис", "", "Вика"];
for (let i = 0; i < names.length; i++) {
if (names[i] === "") continue; // Пропускаем пустые строки
console.log("Имя:", names[i]);
}
Пример 3: Использование с циклом while
let i = 0;
while (i < numbers.length) {
i++;
if (numbers[i] < 0) continue;
console.log("Положительное число:", numbers[i]);
}
3. Применение в реальном приложении
Давайте доработаем ваше учебное приложение — например, пользователь вводит несколько чисел, а мы выводим только первые три положительных числа, которые он ввёл. Как это реализовать?
const inputNumbers = [0, -5, 2, 4, -1, 8, -3, 10];
let count = 0;
for (let i = 0; i < inputNumbers.length; i++) {
if (inputNumbers[i] <= 0) continue; // Пропускаем неположительные числа
console.log("Положительное число:", inputNumbers[i]);
count++;
if (count === 3) break; // Нашли три — хватит!
}
Результат:
Положительное число: 2
Положительное число: 4
Положительное число: 8
4. Типичные ошибки при использовании break и continue
Ошибка №1: Ожидание, что break завершит все циклы сразу.
break выходит только из того цикла, где он находится. Если у вас вложенные циклы, внешний продолжит работу. Если хотите выйти сразу из нескольких — используйте метки (но лучше пересмотреть логику!).
Ошибка №2: Забытая инкрементация переменной цикла после continue в while.
В цикле while, если после проверки условия вы делаете continue, не забывайте увеличить счётчик до этого! Иначе цикл может стать вечным.
let i = 0;
while (i < 5) {
if (i === 2) continue; // ОПАСНО: i не увеличивается, вечный цикл!
i++;
}
Правильно:
let i = 0;
while (i < 5) {
if (i === 2) {
i++; // сначала увеличиваем, потом пропускаем
continue;
}
i++;
}
Ошибка №3: Использование break и continue вне цикла.
Они работают только внутри циклов (for, while, do...while). Вне цикла — будет ошибка синтаксиса.
Ошибка №4: Неочевидная логика после continue.
Всё, что написано после continue в теле цикла, не будет выполняться на этой итерации. Это может привести к неожиданным результатам, если вы рассчитываете на выполнение этого кода.
Ошибка №5: Использование break вместо return в функции.
Если вы хотите завершить выполнение функции, используйте return, а не break. break работает только для циклов.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ