Инструкция For... Next (Visual Basic)
Обновлен: Ноябрь 2007
Повторяет группу операторов заданное количество раз.
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Компоненты
counter
Требуется в операторе For. Числовая переменная. Управляющая переменная цикла.datatype
Является обязательным, если counter еще не был объявлен. Тип данных counter.start
Обязательный атрибут. Числовое выражение. Начальное значение counter.end
Обязательный атрибут. Числовое выражение. Конечное значение counter.step
Необязательный атрибут. Числовое выражение. Шаг, с которым counter увеличивается при каждом прохождении цикла.statements
Необязательный атрибут. Одно или несколько выражений между For и Next, выполняемых указанное число раз.Exit For
Необязательный атрибут. Передача управления из цикла For.Next
Обязательный атрибут. Завершение определения цикла For.
Заметки
Структура For... Next используется при необходимости повторения набора инструкций несколько раз.
Циклы Оператор While... End While (Visual Basic) или Оператор Do...Loop (Visual Basic) удобны, когда неизвестно необходимое число повторов выполнения операторов. Однако, если предполагается повторить цикл определенное число раз, то лучше использовать цикл For...Next. Число итераций определяется при первом входе в цикл.
Значение step может быть либо положительным, либо отрицательным. Оно определяет обработку цикла следующим образом:
Значение шага |
Цикл выполняется, если |
---|---|
Положительное или нулевое |
counter <= end |
Отрицательное |
counter >= end |
Если не указано, step по умолчанию равен 1.
Правила
Типы данных. Типом данных counter является обычно Integer, но может быть любой тип, поддерживающий операторы больше или равно (>=), меньше или равно (<=), а также операторы сложения (+) и вычитания (-). Он даже может определяемым пользователем типом, если тот поддерживает все эти операторы.
Выражения start, end и step обычно приводятся к типу Integer, но могут быть приведены к любому большему по разрядности типу, чем тип counter. При использовании определяемого пользователем типа для counter это означает, что может потребоваться определить оператор преобразования CType для преобразования типов start, end или step к типу counter.
Объявление. Если counter не был объявлен вне цикла, то его нужно объявить в операторе For. В этом случае областью действия counter является тело цикла. В то де время, нельзя определять counter и внутри, и снаружи цикла.
Число итераций. Visual Basic вычисляет значения итераций start, end и step только один раз перед началом цикла. Если в блоке операторов значение end или step изменяется, то это изменение не оказывает влияния на повторение цикла.
Вложенные циклы. Циклы For могут вкладываться друг в друга. При этом каждый цикл должен иметь уникальную переменную counter. Следующая конструкция верна:
For i As Integer = 1 To 10 For j As Integer = 1 To 10 For k As Integer = 1 To 10 ' Insert statements to operate with current values of i, j, and k. Next k Next j Next i
Также можно вложить друг в друга различные виды управляющих структур. Дополнительные сведения см. в разделе Вложенные структуры управления.
Примечание. Если инструкция Next внешнего уровня вложенности встретилась раньше, чем Next внутреннего уровня, то компилятор сообщает об ошибке. При этом компилятор может обнаружить эту ошибку перекрывания только в том случае, если в каждой инструкции Next задан counter.
Определение управляющих переменных. Можно дополнительно указать counter в инструкции Next. Это повышает удобочитаемость программы, особенно если имеются вложенные циклы For. Следует указать ту же переменную, что и в соответствующем операторе For.
Выход из цикла.Оператор Exit (Visual Basic) немедленно передает управление оператору, следующему за оператором Next. Выход из цикла может потребоваться при обнаружении условия, которое делает бесполезным или невозможным продолжение итераций, например ошибочное значение или запрос на завершение. Кроме того, если происходит перехват исключения в Try... Catch... Finally, то можно использовать Exit For в конце блока Finally.
Можно установить любое число операторов Exit For в любом месте цикла For. Exit For часто используется после оценки некоторого условия, например в структуре If... Then... Else.
**Бесконечные циклы.**Exit For, в частности, применяется для тестирования условия, которое может вызвать бесконечный цикл, т. е. цикл, повторяемый очень много раз или бесконечно. При обнаружении таких условий для выхода из цикла можно использовать Exit For. Дополнительные сведения см. в разделе Оператор Do...Loop (Visual Basic).
Поведение
Вход в цикл. При начале выполнения цикла For...Next Visual Basic вычисляет start, end и step только один раз. Затем назначается значение start переменной counter. Перед выполнением блока операторов сравниваются counter и end. Если значение counter превысило конечное значение, то цикл For завершается, а управление передается оператору, следующему после Next. В противном случае выполняется блок операторов.
Итерации цикла. Каждый раз при обнаружении оператора Next Visual Basic увеличивает counter на step и возвращается к оператору For. После этого сравниваются counter и end, и в зависимости от результата происходит либо выполнение блока, либо завершение цикла. Этот процесс продолжается до тех пор, пока counter не превысит end, или не встретится оператор Exit For.
Завершение цикла. Цикл не завершается до тех пор, пока counter не превысит end. Если counter равен end, то цикл продолжается. Сравнением, определяющим, следует ли выполнять блок, является counter <= end для положительного step и counter >= end для отрицательного step.
Изменение значений итерации. Изменение значения counter внутри тела цикла может осложнить читаемость и отладку кода. Изменение значений start, end или step не влияет на значения итерации, определенные при первом входе в цикл.
Пример
В следующем примере демонстрируются вложенные структуры For...Next с разными значениями шага.
Dim words, digit As Integer
Dim thisString As String = ""
For words = 10 To 1 Step -1
For digit = 0 To 9
thisString &= CStr(digit)
Next digit
thisString &= " "
Next words
В предыдущем примере создается строка, содержащая 10 цифр от 0 до 9; каждая строка отделена от других одним пробелом. Внешний цикл использует счетчик цикла, уменьшающийся с каждым прохождением тела цикла.
См. также
Задачи
Практическое руководство. Улучшение быстродействия цикла
Основные понятия
Вложенные структуры управления
Ссылки
Оператор While... End While (Visual Basic)