logo
Лекции_ПиОА[1]

12.3. Работа со структурами управления и досрочный выход из них

В

Private Sub Form_Click()

Dim SFont, PFont

For SFont = 1 to Screen.FontCount

For PFont = 1 to Printer.FontCount

If Screen.Fonts(Sfont) = Printer.Fonts(Pfont) Then

Debug.Print Printer.Fonts(Pfont)

End If

Next PFont

Next SFont

End Sub

ложенные структуры управления. Структуры управления можно помещать внутрь других структур, например блок ifThen внутрь цикла ForNext. Говорят, что структура управления, помещенная внутрь другой структуры, является вложенной. Глубина вложения управляющих структур не ограничена. Для улучшения читаемости кода принято смещать конструкции принятия решения или цикла в программе в случае использования вложенных структур управления. Например, следующая процедура печатает названия всех общих шрифтов для принтера и экрана. Заметим, что первый оператор Next закрывает внутренний цикл For, а последний оператор Next закрывает внешний цикл For. Точно так же и для вложенных операторов if, операторы End if автоматически применяются для закрытия ближайшего к нему оператора if. Вложенные структуры Do...Loop работают подобным же образом – самый дальний оператор Loop соответствует самому дальнему оператору Do.

О

For <переменная цикла> = <начальное значение> To <конечное значение> [Step <приращение>]

[<блок операторов>]

[Exit For]

[<блок операторов>]

Next [<счетчик>[, < счетчик >] [,...]]

Do [{While | Until} <условие>]

[<блок операторов>]

[Exit Do]

[<блок операторов>]

Loop

ператор Exit позволяет досрочно выходить из циклов For, Do и процедур Sub, Function. Синтаксис оператора Exit прост. Операторы Exit For внутри цикла For и Exit Do внутри цикла Do могут появляться сколь угодно раз. Оператор Exit Do работает со всеми разновидностями структуры цикла Do. Операторы Exit For и Exit Do применяются, когда необходимо завершить цикл немедленно, не продолжая дальнейших итераций или не ожидая выполнения блока операторов в теле цикла. Например, в предыдущем примере, который печатает общие шрифты для экрана и принтера, процесс сравнения продолжается даже в том случае, когда соответствие с каким-то шрифтом принтера уже найдено. В более эффективной версии этой процедуры при помощи оператора досрочного выхода организуется немедленный выход из цикла, как только найдено нужное соответствие. Как демонстрирует следующий пример, оператор Exit почти всегда используется внутри оператора структуры ветвления, создаваемой при помощи операторов If или Select Case, и вложенной в цикл.

П

Private Sub Form_Click()

Dim SFont, PFont

For SFont = 1 to Screen.FontCount

For PFont = 1 to Printer.FontCount

If Screen.Fonts(Sfont) = Printer.Fonts(Pfont) Then

Debug.Print Printer.Fonts(Pfont)

Exit For ' Выход из внутреннего цикла

End If

Next PFont

Next SFont

End Sub

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