Do...Loop
 
Оператор управления потоком для цикла

Синтаксис

Do [ { Until | While } condition ]
[ statement block ]
Loop
или
Do
[ statement block ]
Loop [ { Until | While } condition ]

Описание

Заявление Do выполняет инструкции в следующем statement block до тех пор/в то время как condition, если таковое имеется, оценивается как TRUE.

Если используется Until, заявление Do останавливает итерацию statement block когда condition оценивается как true. Ключевое слово While имеет обратный эффект, останавливает цикл, если condition оценивается как false. Если оба condition и либо Until либо While опущены, заявление Do превращается в бесконечный цикл.

Если заявление Exit Do встречается внутри statement block, цикл завершается, и выполнение возобновляется сразу же после его заявления Loop. Если заявление Continue Do встречается , остальная часть statement block пропускается и выполнение возобновляется с заявления Do.

В первом синтаксисе,  condition проверяется , когда заявление Do встречается впервые, и если condition удовлетворяется, statement block будет пропущен. Во втором синтаксисе, condition первоначально проверяется после выполнения statement block. Это означает, что statement block всегда гарантированно выполнится по крайней мере один раз.

condition может быть любым допустимым выражением, False (ноль) или True (не ноль).

Пример

В этом примере, цикл Do используется для подсчета общего количества нечетных чисел от 1 до 10. Цикл будет повторяться until(пока)  условие n > 10 выполняется:
Dim As Integer n = 1                            '' число для проверки
Dim As Integer total_odd = 0                    '' нарастающий итог нечетных чисел
Do Until( n > 10 )
  If( ( n Mod 2 ) > 0 ) Then total_odd += 1    '' добавить в общую сложность, если n нечетное (есть остаток от деления на 2)
  n += 1
Loop
Print "total odd numbers: " ; total_odd         '' напечатает '5'

End 0


Здесь бесконечный цикл DO используется для того, чтобы подсчитать общее количество четных чисел. Мы размещаем условную проверку внутри цикла посредством заявления If...Then, который заставит выполниться команде Exit DO (прервать цикл), когда условие n > 10 станет true:
   Dim As Integer n = 1                            '' число для проверки
   Dim As Integer total_even = 0                   '' нарастающий итог четных чисел
   Do
      If( n > 10 ) Then Exit Do                    '' выход из цикла, если проверены 10 чисел
   
      If( ( n Mod 2 ) = 0 ) Then total_even += 1   '' добавить в общую сложность, если n четное (нет остатка от деления на 2)
      n += 1
   Loop
   Print "total even numbers: " ; total_even       '' напечатает '5'

   End 0


Различия диалектов

  • В диалектах -lang qb и -lang fblite, переменные, объявленные внутри блока DO..LOOP имеют функционально-расширенную область видимости как в QB
  • В диалектах -lang fb и -lang deprecated, переменные, объявленные внутри блока DO..LOOP видимы только в блоке и нет к ним доступа снаружи.

Отличия от QB

  • Нет

См. также