Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Директивы break и continue

Лекция



Привет, сегодня поговорим про директивы break, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое директивы break, continue , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).


  1. Выход: break
  2. Следующая итерация: continue
  3. Метки

Для более гибкого управления циклом используются директивы break и continue.

Выход: break

Выйти из цикла можно не только при проверке условия но и, вообще, в любой момент. Эту возможность обеспечивает директива break.

Например, бесконечный цикл в примере прекратит выполнение при i==5:

 

01 var i=0;
02  
03 while(1) {
04   i++;  
05  
06   if (i==5) break;
07  
08   alert(i);
09 }
10  
11 alert('Последняя i = '+ i ); // 5 (*)

 

Выполнение продолжится со строки (*), следующей за циклом.

Следующая итерация: continue

Директива continue прекращает выполнение текущей итерации цикла. Например, цикл ниже не выводит четные значения:

 

   
1 for (var i = 0; i < 10; i++) {
2    
3   if (i % 2 == 0) continue;
4  
5   alert(i);
6 }

 

Для четных i срабатывает continue, выполнение блока прекращается и управление передается наfor.

 

Совет по стилю

Как правило, continue и используют, чтобы не обрабатывать определенные значения в цикле.

Цикл, который обрабатывает только часть значений, мог бы выглядеть так:

 

01 for (var i = 0; i < 10; i++) {
02    
03   if ( checkValue(i) ) {
04     // функция checkValue проверяет, подходит ли i
05  
06     // ...
07     // ... обработка
08     // ... этого
09     // ... значения
10     // ... цикла
11     // ...
12  
13   }
14 }

 

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

Гораздо лучше здесь использовать continue:

01 for (var i = 0; i < 10; i++) {
02    
03   if ( !checkValue(i) ) continue;
04   
05   // здесь мы точно знаем, что i подходит
06  
07   // ...
08   // ... Об этом говорит сайт https://intellect.icu . обработка
09   // ... этого
10   // ... значения
11   // ... цикла
12   // ...
13  
14 }

 

 

 

Нельзя использовать break/continue справа от оператора ‘?’

Обычно мы можем заменить if на оператор вопросительный знак '?'.

То есть, запись:

1 if (условие) {
2   a();
3 else {
4   b();
5 }
..Аналогична записи:
условие ? a() : b();

 

В обоих случаях в зависимости от условия выполняется либо a() либо b().

Но разница состоит в том, что оператор вопросительный знак '?', использованный во второй записи, возвращает значение.

Синтаксические конструкции, которые не возвращают значений, нельзя использовать в операторе '?'. К таким относятся большинство конструкций и, в частности, break/continue.

Поэтому такой код приведет к ошибке:

(i > 5) ? alert(i) : continue;

 

 

Метки

Бывает нужно выйти одновременно из нескольких уровней цикла.

Представим, что нужно ввести значения точек. У каждой точки есть две координаты (i, j). Цикл для ввода значений i,j = 0..2 может выглядеть так:

 

   
01 for (var i = 0; i < 3; i++) {
02  
03   for (var j = 0; j < 3; j++) {
04      
05     var input = prompt("Значение в координатах " + i + "," + j, "");
06  
07     if (input == nullbreak// (*)
08  
09   }
10 }
11 alert('Готово!');

 

Здесь break используется, чтобы прервать ввод, если посетитель нажал на Отмена. Но обычный вызовbreak в строке (*) не может прервать два цикла сразу. Как же прервать ввод полностью? Один из способов — поставить метку.

Метка имеет вид "имя:", имя должно быть уникальным. Она ставится перед циклом, вот так:

 

outer: for (var i = 0; i < 3; i++) { ... }

 

Можно также выносить ее на отдельную строку. Вызов break outer прерывает управление цикла с такой меткой, вот так:

 

   
01 outer:
02 for (var i = 0; i < 3; i++) {
03  
04   for (var j = 0; j < 3; j++) {
05      
06     var input = prompt('Значение в координатах '+i+','+j, '');
07  
08     if (input == nullbreak outer// (*)
09  
10   }
11 }
12 alert('Готово!');

 

Директива continue также может быть использована с меткой. Управление перепрыгнет на следующую итерацию цикла с меткой.

Метки можно ставить в том числе на блок, без цикла:

   
01 my: {
02  
03   for (;;) {
04     for (i=0; i<10; i++) {
05       if (i>4) break my;
06     }
07   }
08    
09   some_code; // произвольный участок кода
10  
11 }
12 alert("После my"); // (*)

 

В примере выше, break перепрыгнет через some_code, выполнение продолжится сразу после блока my, со строки (*). Возможность ставить метку на блоке используется редко. Обычно метки ставятся перед циклом.

 

Goto?

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

Операторы break/continue более ограниченны. Они работают только внутри циклов, и метка должна быть не где угодно, а выше по уровню вложенности.

В JavaScript нет goto.

 

 

Важность: 4

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

Другими словами, n>1 - простое, если при делении на любое число от 2 до n-1 есть остаток.

Создайте код, который выводит все простые числа из интервала от 2 до 10.Результат должен быть: 2,3,5,7.

P.S. Код также должен легко модифицироваться для любых других интервалов.

Решение
Схема решения

 

1 Для всех i от 1 до 10 {
2  проверить, делится ли число i на какое-либо из чисел до него
3    если делится, то это i не подходит, берем следующее
4    если не делится, то i - простое число
5 }

 

Решение

Решение с использованием метки:

 

   
1 nextPrime:
2 for(var i=2; i<10; i++) {
3  
4   for(var j=2; j<i; j++) {
5     if ( i % j == 0) continue nextPrime;
6   }
7    
8   alert(i);  // простое
9 }

 

Конечно же, его можно оптимизировать с точки зрения производительности. Например, проверять все j не от 2 до i, а от 2 до квадратного корня из i. А для очень больших чисел — существуют более эффективные специализированные алгоритмы проверки простоты числа, например квадратичное решето и решето числового поля.

 

К сожалению, в одной статье не просто дать все знания про директивы break. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое директивы break, continue и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

Из статьи мы узнали кратко, но содержательно про директивы break
создано: 2014-10-07
обновлено: 2021-03-13
132578



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)