Цикл Do...Loop позволяет организовать повторение блока кода с более гибкими условиями завершения, чем For (который ориентирован на счётчик) или While (где условие всегда проверяется на входе). В Visual Basic существуют четыре основных варианта записи:
' Проверка на входе Do While condition ' Тело цикла Loop ' Проверка на выходе Do ' Тело цикла Loop While condition ' Аналогично с Until: Do Until condition ' Тело цикла Loop Do ' Тело цикла Loop Until condition
Использовать Do...Loop стоит, если:
Вопрос: Что произойдёт, если внутри цикла Do While condition условие condition изначально ложно? Будет ли выполнено хоть одно тело цикла?
Ответ: Нет, тело цикла вообще не выполнится, поскольку проверка происходит ДО первого выполнения.
Пример:
Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' Ни одной строки не будет выведено.
История
На этапе парсинга данных разработчик использовал цикл
Do Until reader.EndOfStreamвнутри которого вызывалось чтение строки из файла. Но посколькуEndOfStreamстановится истинным только после попытки чтения за пределами файла, последняя строка не обрабатывалась. Правильный способ: использоватьDo While Not reader.EndOfStreamили обработать чтение построчно и завершать цикл по условию EOF.
История
При миграции кода с For к Do...Loop был реализован цикл без явной инкрементации переменной-счётчика внутри тела. В результате программа ушла в бесконечный цикл, поскольку условие окончания никогда не наступало. Необходимо всегда контролировать изменение ключевых переменных внутри тела Do...Loop.
История
В одной из подсистем отчётности программист использовал вложенные циклы
Do...Loopбез учёта вложенности условийExit Do: внутреннийExit Doвыходил только из внутреннего цикла, а не из обоих. Кратковременный блокирующий баг был выявлен только на бою при больших объёмах данных.