Что такое циклы без параметров
Перейти к содержимому

Что такое циклы без параметров

  • автор:

Операторы итерации — for , foreach , do и while

Операторы итерации многократно выполняют инструкцию или блок инструкций. Оператор for выполняет текст, пока указанное логическое выражение вычисляется true . Инструкция foreach перечисляет элементы коллекции и выполняет его текст для каждого элемента коллекции. Оператор do условно выполняет свой текст один или несколько раз. Оператор while условно выполняет его тело ноль или более раз.

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

Инструкция for

Оператор for выполняет оператор или блок операторов, пока определенное логическое выражение равно значению true . В следующем примере показана инструкция for , выполняющая тело пока целочисленный счетчик меньше трех:

for (int i = 0; i < 3; i++) < Console.Write(i); >// Output: // 012 

В предыдущем примере показаны элементы оператора for :

    Раздел инициализатора, который выполняется только один раз перед входом в цикл. Как правило, в этом разделе объявляется и инициализируется локальная переменная цикла. Доступ к объявленной переменной извне оператора for невозможен. В разделе инициализатора в предыдущем примере объявляется и инициализируется целочисленная переменная-счетчик:

int i = 0 

Раздел итератора может содержать ноль или более следующих выражений оператора, разделенных запятыми:

  • префиксное или постфиксное выражение приращения, такое как ++i или i++
  • префиксное или постфиксное выражение декремента, такое как —i или i—
  • присваивание
  • вызов метода
  • Выражение await
  • создание объекта с помощью new оператора

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

int i; int j = 3; for (i = 0, Console.WriteLine($"Start: i=, j="); i < j; i++, j--, Console.WriteLine($"Step: i=, j=")) < //. >// Output: // Start: i=0, j=3 // Step: i=1, j=2 // Step: i=2, j=1 

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

Инструкция foreach

Оператор foreach выполняет оператор или блок операторов для каждого элемента в экземпляре типа, который реализует интерфейс System.Collections.IEnumerable или System.Collections.Generic.IEnumerable , как показано в следующем примере.

List fibNumbers = [0, 1, 1, 2, 3, 5, 8, 13]; foreach (int element in fibNumbers) < Console.Write($""); > // Output: // 0 1 1 2 3 5 8 13 

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

  • Тип имеет открытый метод без параметров GetEnumerator . Этот GetEnumerator метод может быть методом расширения типа.
  • тип возвращаемого значения метода GetEnumerator должен содержать открытое свойство Current и открытый метод MoveNext без параметров с типом возвращаемого значения bool .

В следующем примере показано использование оператора foreach с экземпляром типа System.Span , который не реализует интерфейс:

Span numbers = [3, 14, 15, 92, 6]; foreach (int number in numbers) < Console.Write($""); > // Output: // 3 14 15 92 6 

Если свойство перечислителя Current возвращает возвращаемое значение ссылки ( ref T где T тип элемента коллекции), можно объявить переменную итерации с ref ref readonly модификатором, как показано в следующем примере:

Span storage = stackalloc int[10]; int num = 0; foreach (ref int item in storage) < item = num++; >foreach (ref readonly var item in storage) < Console.Write($""); > // Output: // 0 1 2 3 4 5 6 7 8 9 

Если исходная коллекция инструкции foreach пуста, тело оператора foreach не выполняется и пропускается. Если оператор foreach применяется к null , возникает исключение NullReferenceException.

await foreach

await foreach (var item in GenerateSequenceAsync())

Оператор await foreach можно также использовать с экземпляром любого типа, который удовлетворяет следующим условиям:

  • Тип имеет открытый метод без параметров GetAsyncEnumerator . Этот метод может быть методом расширения типа.
  • Тип возвращаемого значения метода GetAsyncEnumerator имеет открытое свойство Current и открытый метод без параметров MoveNextAsync , тип возвращаемого значения которого — Task , ValueTask или любой другой подтверждающий ожидание тип, метод ожидания которого GetResult возвращает значение bool .

Элементы потока по умолчанию обрабатываются в захваченном контексте. Чтобы отключить захват контекста, используйте метод расширения TaskAsyncEnumerableExtensions.ConfigureAwait. Дополнительные сведения о контекстах синхронизации и захвате текущего контекста см. в статье Использование асинхронного шаблона, основанного на задачах. Дополнительные сведения об асинхронных потоках см. в руководстве по асинхронным потокам.

Тип переменной итерации

Можно использовать ключевое слово var , чтобы компилятор мог определить тип переменной итерации в операторе foreach , как показано в следующем коде:

foreach (var item in collection)

var Тип может быть выведен компилятором в качестве ссылочного типа, допускающего значение NULL, в зависимости от того, включен ли контекст с поддержкой NULL и является ли тип выражения инициализации ссылочным типом. Дополнительные сведения см . в разделе неявно типизированные локальные переменные.

Можно также явно указать тип переменной итерации, как показано в следующем коде:

IEnumerable collection = new T[5]; foreach (V item in collection)

В предыдущей форме тип T элемента коллекции должен быть неявно или явно преобразован в тип V переменной итерации. Если явное преобразование из T в V завершается ошибкой во время выполнения, оператор foreach выдает исключение InvalidCastException. Например, если T является незапечатанным типом класса, V может быть любым типом интерфейса, даже тем, который T не реализует. Во время выполнения тип элемента коллекции может быть производным от T и фактически реализовать V . В противном случае возникает InvalidCastException.

Инструкция do

Оператор do выполняет оператор или блок операторов, пока определенное логическое выражение равно значению true . Так как это выражение оценивается после каждого выполнения цикла, цикл do выполняется один или несколько раз. Цикл do отличается от while цикла, который выполняется нулевым или более раз.

В следующем примере показано применение оператора do .

int n = 0; do < Console.Write(n); n++; >while (n < 5); // Output: // 01234 

Инструкция while

Оператор while выполняет оператор или блок операторов, пока определенное логическое выражение равно значению true . Так как это выражение оценивается перед каждым выполнением цикла, цикл while выполняется ноль или несколько раз. Цикл while отличается от do цикла, который выполняется один или несколько раз.

В следующем примере показано применение оператора while .

int n = 0; while (n < 5) < Console.Write(n); n++; >// Output: // 01234 

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

Дополнительные сведения об этих функциях см. в следующих заметках о предложении функций:

  • Асинхронные потоки
  • Поддержка расширения GetEnumerator для циклов foreach

См. также

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Циклы и все, что нужно знать об их параметрах

В программировании не всегда все операции выполняются по одному разу. Иногда для решения поставленной задачи требуется многократное их повторение. Это касается как языка Pascal, так и других.

На помощь в таких случаях приходят специальные конструкции. Они носят название циклов. В данной статье будет рассказано о том, как работают такие компоненты. А еще – какие параметры они имеют.

Цикл – это…

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

Цикл – последовательность инструкций, которые будут повторять один и тот же процесс снова и снова. Осуществляется это до тех пор, пока программа не получит команду на остановку или не будет достигнуто заранее выставленное условие.

Есть еще и бесконечный цикл. Характеризуется непрерывным повторением фрагмента утилиты, которое будет вечным. Обычно вызывается ситуация условными операторами и функциями, перенаправляющими код обратно в «первоначальный блок». И так до бесконечности.

Составляющие

При записи рассматриваемого компонента можно выделить:

  1. Тело цикла. Оно содержит выражения, операторы и иные инструкции, которые нужно будет выполнять. Можно назвать тело описанием. Реализовывается тогда, когда значение прописанного изначально условия имеет параметр true.
  2. Заголовок. Он определяет, до каких пор или сколько раз тело выполняется.

Далее будут изучены операторы циклов с параметрами. Они применяются разработчиками для того, чтобы сделать исходное приложение грамотно функционирующим. Но каждый вариант требует определенных навыков, умений и знаний.

Типы операторов цикла

В Pascal существуют разнообразные виды рассматриваемого компонента:

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

Циклы и все, что нужно знать об их параметрах

Блок с For

Название цикла For – «со счетчиком». Он применяется тогда, когда количество повторений напрямую связано с тем, что происходит непосредственно в теле. Именно такое определение дают поисковики и специализированная литература.

Оператор For приходит на помощь, когда количество повторений заранее известно.В заголовке указываются два значения:

  1. Значение, которое получает переменная счетчик. От него начинается отсчет итераций. Он происходит шаг за шагом. Данный параметр равняется +1 на каждом новом «этапе».
  2. Значение, которое будет отвечать за значение счетчика для остановки. Отражает количество итераций цикла.

Ниже – примеры того, в каких формах представления можно выразить в Pascal рассматриваемый «оператор».

Циклы и все, что нужно знать об их параметрах

Стоит обратить внимание на то, что если между начальным и конечным значением переменных счетчика стоит to – на каждом шаге значение увеличивается на +1. При downto происходит уменьшение на аналогичный параметр.

Счетчик – переменная любого из перечисляемых типов. Начальные и конечные значения тут бывают не только значениями, но и целыми выражениями, отвечающими за возврат совместимых с типов счетчика типов данных.

Изучая параметры и выполнение цикла в Pascal, стоит более детально рассмотреть каждую существующую схему «повторяющихся блоков». Эта информация поможет не запутаться в процессе создания уникальных крупных проектов.

Количество итераций в for определено еще до выполнения «петли». Ниже – примеры того, как клиент будет отвечать за соответствующий параметр. Значение тут присваивается переменной, после чего оно используется в заголовке. К этому моменту понятно, сколько «петля» повторится:

var i, n: integer; begin write('Сколько символов: '); readln(n); for i := 1 to n do write('*'); writeln; end.

Работа с While

While – это цикл с параметром, схема которого представлена выше. А именно – оператор с предусловием. В заголовке будет находиться логическое выражение. Когда оно возвращает «истину», тело выполняется. В противном случае – нет. Программа просто перейдет к следующему фрагменту в коде.

Здесь стоит обратить внимание на следующие моменты:

  1. При выполнении тела ход программы снова возвращается к заголовку.
  2. Описание условия выполнения тела снова проходит стадию проверки.
  3. Выполнение осуществляется в «операторе» столько раз, сколько выражение логического характера возвращает себе «истину».
  4. В теле важно предусматривать все корректировки переменных, используемых в заголовках. Сделать это так, чтобы когда-нибудь наступала ситуация логической лжи. Если пренебречь этим моментом, произойдет зацикливание.

Так, While повторит код число n раз, которое заранее неизвестно. Определение происходит непосредственно по мере работы контента. Ниже – примеры выполнения соответствующего оператора.

C:\Users\ASUS\AppData\Local\Microsoft\Windows\INetCache\Content.Word\2.jpg Циклы и все, что нужно знать об их параметрах

С repeat

Рассматривая параметры циклов, стоит обратить внимание на так называемый оператор с repeat. While может не выполняться, если логическое выражение в заголовке сразу получило false. Но это не всегда удобно и применимо на практике.

Иногда происходит так, что тело должно выполняться хотя бы один раз, независимо от значения, который вернул оператор. Тогда на помощь приходит repeat. Его официальное определение – петля с постусловием.

  1. Оператор repeat предусматривает логическое условие после тела петли.
  2. Если параметр – false, приложение выполнит требование. В противном случае – нет.

Второй описанный момент – это ключевая разница, которую имеет пара while-repeat. Вот – пример использования цикла с параметром в случае с repeat:

Циклы и все, что нужно знать об их параметрах

Выход

Для того, чтобы выходить из петли в Pascal, есть несколько процедур:

  1. Break. Он отвечает за досрочное прекращение выполнения петли в написанной программе.
  2. Continue. Параметр в цикле, который позволяет выйти из текущей итерации. Сама петля не завершится. Она всего лишь перейдет к последующей стадии.

Вот – пример того, как происходит настройка отображения степени двойки в Pascal. Это – всего лишь фрагмент, который обычно рассматривается новичками.

Циклы и все, что нужно знать об их параметрах Циклы и все, что нужно знать об их параметрах

Выше – результат работы с операторами и петлями.

Как быстро разобраться в теме

Операторы, а также параметр цикла, ключевые слова и другие особенности Паскаля достаточно трудно освоить тем, кто не имеет понятия о разработке. Но добиться желаемого результата быстро и без проблем удастся при помощи специализированных дистанционных компьютерных курсов.

Там обязательно расскажут обо всех операторах выбранного языка, его особенностях и принципах работы. Курсы – это быстрый способ получения современной профессии в мире информационных технологий. Рассчитаны на срок от нескольких месяцев до года. Гарантируют ученику удобный образовательный процесс в любое время. Достаточно просто иметь выход в интернет и подходящее устройство.

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

Тем, кто смог завершить обучение, будут вручены электронные сертификаты. Они помогут доказать полученные знания документально. Можно закончить одно или сразу несколько направлений.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus !

Цикл for без параметров

Это означает, что в цикле отсутствуют операторы инициализации и проверки условия. Будет выполняться k = p[k - 1] , пока цикл не прервется изнутри, например, по break .

Отслеживать
ответ дан 28 окт 2014 в 9:59
DarkGenius DarkGenius
895 2 2 золотых знака 11 11 серебряных знаков 31 31 бронзовый знак
@DarkGenius Спасибо, а заменить чем-нибудь возможно эту конструкцию, уж больно глаз не радует.
28 окт 2014 в 10:04
@thejadefalcon: while (true) k = p[k - 1]; возможно, более читаемо.
28 окт 2014 в 10:29
Как сказал @VladD, лучше, можно так еще: for ( ; ; ) < k = p[k - 1] >
28 окт 2014 в 10:33

Это значит, что у цикла нет условий для продолжения, а следовательно, он будет бесконечным. Ну точнее не совсем уж бесконечным - раз тело у цикла пустое, то скорее всего в нем просто вывалится исключение, но многое тут зависит от начального значения k и от содержимого p.

Также для вящей точности было бы неплохо указать, о каком языке идет речь - подобная конструкция возможна во многих языках

Однако в любом случае без своевременного break вывалится исключение - рано или поздно k выйдет за пределы допустимых индексов массива p. Небольшой пример

Отслеживать
ответ дан 28 окт 2014 в 10:01
DreamChild DreamChild
36.3k 3 3 золотых знака 45 45 серебряных знаков 85 85 бронзовых знаков
@DreamChild Java
28 окт 2014 в 10:05

@DreamChild: ну, для случая k = 1 , p = < 0 >не вывалится. А так-то вообще обычный обход связного списка: class LinkedList < int[] next; T[] data; >

Циклы while и for

При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.

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

Для многократного повторения одного участка кода предусмотрены циклы.

Циклы for…of и for…in

Небольшое объявление для продвинутых читателей.

В этой статье рассматриваются только базовые циклы: while , do..while и for(..;..;..) .

Если вы пришли к этой статье в поисках других типов циклов, вот указатели:

  • См. for…in для перебора свойств объекта.
  • См. for…of и Перебираемые объекты для перебора массивов и перебираемых объектов.

В противном случае, продолжайте читать.

Цикл «while»

Цикл while имеет следующий синтаксис:

while (condition) < // код // также называемый "телом цикла" >

Код из тела цикла выполняется, пока условие condition истинно.

Например, цикл ниже выводит i , пока i < 3 :

let i = 0; while (i < 3) < // выводит 0, затем 1, затем 2 alert( i ); i++; >

Одно выполнение тела цикла по-научному называется итерация. Цикл в примере выше совершает три итерации.

Если бы строка i++ отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить «подвисший» скрипт, а JavaScript на стороне сервера придётся «убить» процесс.

Любое выражение или переменная может быть условием цикла, а не только сравнение: условие while вычисляется и преобразуется в логическое значение.

Например, while (i) – более краткий вариант while (i != 0) :

let i = 3; while (i) < // когда i будет равно 0, условие станет ложным, и цикл остановится alert( i ); i--; >

Фигурные скобки не требуются для тела цикла из одной строки

Если тело цикла состоит лишь из одной инструкции, мы можем опустить фигурные скобки :

let i = 3; while (i) alert(i--);

Цикл «do…while»

Проверку условия можно разместить под телом цикла, используя специальный синтаксис do..while :

do < // тело цикла >while (condition);

Цикл сначала выполнит тело, а затем проверит условие condition , и пока его значение равно true , он будет выполняться снова и снова.

let i = 0; do < alert( i ); i++; >while (i < 3);

Такая форма синтаксиса оправдана, если вы хотите, чтобы тело цикла выполнилось хотя бы один раз, даже если условие окажется ложным. На практике чаще используется форма с предусловием: while(…) .

Цикл «for»

Более сложный, но при этом самый распространённый цикл — цикл for .

Выглядит он так:

for (начало; условие; шаг) < // . тело цикла . >

Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3 :

for (let i = 0; i < 3; i++) < // выведет 0, затем 1, затем 2 alert(i); >

Рассмотрим конструкцию for подробней:

часть
начало let i = 0 Выполняется один раз при входе в цикл
условие i < 3 Проверяется перед каждой итерацией цикла.
Если оно вычислится в false , цикл остановится.
тело alert(i) Выполняется снова и снова, пока условие вычисляется в true .
шаг i++ Выполняется после тела цикла на каждой итерации перед проверкой условия.

В целом, алгоритм работы цикла выглядит следующим образом:

Выполнить начало → (Если условие == true → Выполнить тело, Выполнить шаг) → (Если условие == true → Выполнить тело, Выполнить шаг) → (Если условие == true → Выполнить тело, Выполнить шаг) → . 

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

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

Вот в точности то, что происходит в нашем случае:

// for (let i = 0; i < 3; i++) alert(i) // Выполнить начало let i = 0; // Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) < alert(i); i++ >// Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) < alert(i); i++ >// Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) < alert(i); i++ >// . конец, потому что теперь i == 3

Встроенное объявление переменной

В примере переменная счётчика i была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.

for (let i = 0; i < 3; i++) < alert(i); // 0, 1, 2 >alert(i); // ошибка, нет такой переменной

Вместо объявления новой переменной мы можем использовать уже существующую:

let i = 0; for (i = 0; i < 3; i++) < // используем существующую переменную alert(i); // 0, 1, 2 >alert(i); // 3, переменная доступна, т.к. была объявлена снаружи цикла

Пропуск частей «for»

Любая часть for может быть пропущена.

Для примера, мы можем пропустить начало если нам ничего не нужно делать перед стартом цикла.

let i = 0; // мы уже имеем объявленную i с присвоенным значением for (; i < 3; i++) < // нет необходимости в "начале" alert( i ); // 0, 1, 2 >

Можно убрать и шаг :

let i = 0; for (; i

Это сделает цикл аналогичным while (i < 3) .

А можно и вообще убрать всё, получив бесконечный цикл:

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

Прерывание цикла: «break»

Обычно цикл завершается при вычислении условия в false .

Но мы можем выйти из цикла в любой момент с помощью специальной директивы break .

Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:

let sum = 0; while (true) < let value = +prompt("Введите число", ''); if (!value) break; // (*) sum += value; >alert( 'Сумма: ' + sum );

Директива break в строке (*) полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на alert .

Вообще, сочетание «бесконечный цикл + break » – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине или даже в нескольких местах его тела.

Переход к следующей итерации: continue

Директива continue – «облегчённая версия» break . При её выполнении цикл не прерывается, а переходит к следующей итерации (если условие все ещё равно true ).

Её используют, если понятно, что на текущем повторе цикла делать больше нечего.

Например, цикл ниже использует continue , чтобы выводить только нечётные значения:

for (let i = 0; i < 10; i++) < // если true, пропустить оставшуюся часть тела цикла if (i % 2 == 0) continue; alert(i); // 1, затем 3, 5, 7, 9 >

Для чётных значений i , директива continue прекращает выполнение тела цикла и передаёт управление на следующую итерацию for (со следующим числом). Таким образом alert вызывается только для нечётных значений.

Директива continue позволяет избегать вложенности

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

for (let i = 0; i < 10; i++) < if (i % 2) < alert( i ); >>

С технической точки зрения он полностью идентичен. Действительно, вместо continue можно просто завернуть действия в блок if .

Однако мы получили дополнительный уровень вложенности фигурных скобок. Если код внутри if более длинный, то это ухудшает читаемость, в отличие от варианта с continue .

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

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

Например, если мы возьмём этот код:

if (i > 5) < alert(i); >else

…и перепишем его, используя вопросительный знак:

(i > 5) ? alert(i) : continue; // continue здесь приведёт к ошибке

…то будет синтаксическая ошибка.

Это ещё один повод не использовать оператор вопросительного знака ? вместо if .

Метки для break/continue

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

Например, в коде ниже мы проходимся циклами по i и j , запрашивая с помощью prompt координаты (i, j) с (0,0) до (2,2) :

for (let i = 0; i < 3; i++) < for (let j = 0; j < 3; j++) < let input = prompt(`Значение на координатах ($,$)`, ''); // Что если мы захотим перейти к Готово (ниже) прямо отсюда? > > alert('Готово!');

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

Обычный break после input лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.

Метка имеет вид идентификатора с двоеточием перед циклом:

labelName: for (. )

Вызов break в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.

outer: for (let i = 0; i < 3; i++) < for (let j = 0; j < 3; j++) < let input = prompt(`Значение на координатах ($,$)`, ''); // если пустая строка или Отмена, то выйти из обоих циклов if (!input) break outer; // (*) // сделать что-нибудь со значениями. > > alert('Готово!');

В примере выше это означает, что вызовом break outer будет разорван внешний цикл до метки с именем outer .

Таким образом управление перейдёт со строки, помеченной (*) , к alert('Готово!') .

Можно размещать метку на отдельной строке:

outer: for (let i = 0; i

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

Метки не позволяют «прыгнуть» куда угодно

Метки не дают возможности передавать управление в произвольное место кода.

Например, нет возможности сделать следующее:

break label; // не прыгает к метке ниже label: for (. )

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

label: < // . break label; // работает // . >

…Хотя в 99.9% случаев break используется внутри циклов, как мы видели в примерах выше.

К слову, continue возможно только внутри цикла.

Итого

Мы рассмотрели 3 вида циклов:

  • while – Проверяет условие перед каждой итерацией.
  • do..while – Проверяет условие после каждой итерации.
  • for (;;) – Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки.

Чтобы организовать бесконечный цикл, используют конструкцию while (true) . При этом он, как и любой другой цикл, может быть прерван директивой break .

Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует – используют директиву continue .

Обе этих директивы поддерживают метки, которые ставятся перед циклом. Метки – единственный способ для break/continue выйти за пределы текущего цикла, повлиять на выполнение внешнего.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *