Поделиться через


Оператор Do...Loop (Visual Basic)

Обновлен: Ноябрь 2007

Повторяет блок инструкций, пока условие Boolean равно True или до тех пор, пока условие станет True.

Do { While | Until } condition
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
-or-
Do
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop { While | Until } condition

Компоненты

  • While
    Требуется, если используется Until. Повторяет цикл до тех пор, пока condition равно False.

  • Until
    Требуется, если используется While. Повторяет цикл до тех пор, пока condition равно True.

  • condition
    Необязательный параметр. Выражение типа Boolean. Если condition равно Nothing, Visual Basic обрабатывает его как False.

  • statements
    Необязательный атрибут. Один или несколько операторов, повторяемых, пока condition равно или пока не станет равно True.

  • Exit Do
    Необязательный атрибут. Передача управления из цикла Do.

  • Loop
    Обязательный параметр. Завершение определения цикла Do.

Заметки

Используется структура Do...Loop, если требуется повторение набора инструкций неограниченное число раз, пока условие выполняется. Если вы хотите повторить инструкцию определенное количество раз, то For...Next Statement обычно является лучшим выбором.

Структура Do...Loop имеет большую гибкость, чем Оператор While... End While (Visual Basic), поскольку она позволяет выбрать, следует ли завершать цикл, когда condition перестанет быть равным True, либо в случае, когда станет равно True. Она также позволяет проверить condition в начале либо в конце цикла.

Правила

  • Природа условий. Условие обычно является результатом сравнения двух значений, но оно может быть любым выражением, значение которого при вычислении имеет тип Тип данных Boolean (Visual Basic) (True или False). Сюда же относятся значения других типов данных, например числовых типов, преобразованные в тип Boolean.

  • Проверка условий. Можно проверить condition только один раз, в начале либо в конце цикла. While или Until можно использовать для указания condition, но не оба одновременно.

  • Число итераций. Если проверить condition в начале цикла (в инструкции Do), цикл может никогда не выполниться, даже один раз. Если проверить в конце цикла (в инструкции Loop), цикл всегда выполняется по крайней мере один раз.

  • Вложенные циклы. Циклы Do могут вкладываться друг в друга. Также можно вложить друг в друга различные виды управляющих структур. Дополнительные сведения см. в разделе Вложенные структуры управления.

  • Выход из цикла.Оператор Exit (Visual Basic) немедленно передает управление оператору, следующему за оператором Loop. Выход из цикла может потребоваться при обнаружении условия, которое делает бесполезным или невозможным продолжение итераций, например ошибочное значение или запрос на завершение. Можно установить любое число операторов Exit Do в любом месте цикла Do. Exit Do часто используется после оценки некоторого условия, например в структуре If...Then...Else.

Бесконечные циклы.

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

В следующем примере, number присваивается значение, которое может вызвать выполнение цикла более 2 ^ 31 раз. Если оператор If существует, он проверяет это значение и выполняет выход, предотвращая бесконечный цикл.

Sub exitDoExample()
    Dim counter As Integer = 0
    Dim number As Integer = 8
    Do Until number = 10
        If number <= 0 Then Exit Do
        number -= 1
        counter += 1
    Loop
    MsgBox("The loop ran " & counter & " times.")
End Sub
eked04a7.alert_note(ru-ru,VS.90).gifПримечание.

Для остановки бесконечного цикла нажмите ESC или CTRL+BREAK.

Пример

В следующем примере показаны вложенные структуры Do...Loop, а также использование While и Until и тестирование в начале (инструкция Do) и в конце цикла (инструкция Loop).

Sub DoExample()
    Dim check As Boolean = True
    Dim counter As Integer = 0
    Do
        Do While counter < 20
            counter += 1
            If counter = 10 Then
                check = False
                Exit Do
            End If
        Loop
    Loop Until check = False
End Sub

В предыдущем примере структура внутреннего Do...Loop цикла выполняется 10 раз, устанавливает значение флага в False и преждевременно выходит из инструкции Exit Do. Внешний цикл прекращается сразу после проверки значения флага.

См. также

Задачи

Практическое руководство. Улучшение быстродействия цикла

Основные понятия

Циклические структуры

Вложенные структуры управления

Ссылки

Инструкция For... Next (Visual Basic)

Тип данных Boolean (Visual Basic)

Оператор Exit (Visual Basic)

Оператор While... End While (Visual Basic)