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

12.1. Конструкции принятия решения (ветвление)

Используются три конструкции принятия решения: IfThen, IfThenElse, Select Case.

Конструкция 1

Конструкция 2

If Дата < Now Then Дата = Now,

где Now - системная дата

If anyDate < Now Then

anyDate = Now

End If

К

If <условие> Then

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

End If

If <условие> Then <один оператор>

If anyDate < Now Then

anyDate = Now

Timer1.Enabled = False ' Запретить таймер.

End If

онструкция
IfThen. Применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис конструкции позволяет задать ее в одной строке или нескольких строках программы (блоковая конструкция). Обычно условие является логической величиной, но оно может быть любым выражением с числовым значением. Значение интерпретируется как True (Истина) или False (Ложь) в соответствии со следующим правилом: нулевое значение – False (Ложь), любое ненулевое значение – True (Истина). Если условие истинно, выполняются все операторы, стоящие после ключевого слова Then. Следующие две конструкции эквивалентны. Синтаксис конструкции ifThen для одной строки не требует оператор End if. Чтобы выполнить последовательность операторов следует использовать блоковую конструкцию ifThenEnd if.

К

If <условие 1> Then

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

[ElseIf < условие 2> Then

[блок операторов 2]] ...

[Else

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

End If

онструкция
lfThenElse. Определяет несколько блоков операторов, один из которых будет выполняться в зависимости от условия. Сначала проверяет первое условие 1. Если оно ложно, то проверяет следующее условие 2 и т. д., пока не найдется истинное условие. Для него выполняется соответствующий блок операторов, а затем управление передается инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который выполняется, если не выполнено ни одно из условий.

К

Private Sub mnuCut_Click (Index As Integer)

If Index = 0 Then 'Команда Cut

CopyActiveControl 'Вызовы общих процедур

ClearActiveControl Elself Index = 1 Then 'Команда Copy

CopyActiveControl

ElseIf Index = 2 Then 'Команда Clear

ClearActiveControl

Else 'Команда Paste

PasteActiveControl

End If

End Sub

онструкция
If...Then...ElseIf (ElseIf пишется слитно, а End if – раздельно) в действительности всего лишь специальный случай конструкции If...Then...Else. В данной конструкции может быть любое число блоков ElseIf, или ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf. Например, приложение может выполнять разные действия в зависимости от того, на каком элементе управления из массива меню элементов выполнен щелчок. В конструкцию If... Then можно добавлять любое число блоков ElseIf. Однако при большом числе этих блоков конструкция становится громоздкой и неудобной. В этом случае, если условие содержит одно и то же проверяемое выражение, применяют другую конструкцию – Select Case.

К

Select Case <проверяемое выражение>

[Case <список значений 1>

[<1-ый блок операторов>]]

[Case < список значений 2>

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

...

[Case Else

[<n-ый блок операторов >]]

End Select

онструкция
Select Case. Конструкция является альтернативой конструкции IfThenElse когда выполняется блок из большого набора операторов. Она предоставляет возможности, аналогичные возможности ifThenElse, но в отличие от нее делает код удобочитаемым.

Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в конструкцию. Результат вычисления сравнивается со значениями, задаваемыми списками других выражений в операторах Case. Если найдено совпадение, выполняется блок операторов, непосредственно следующих за оператором case, в котором это совпадение найдено. В каждом из списков значений может быть одно или более значений. Выражения в списке отделяются друг от друга запятыми. Список можно задавать также интервалом значений в виде: <начало интервала> to <конец интервала>. Если вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. Блок операторов, ассоциированный с необязательным оператором Case Else, выполняется если не найдено ни одного соо

Private Sub mnuCut_Click (Index As Integer)

Select Case Index

Case 0 'Команда Cut.

CopyActiveControl 'Вызовы общих процедур.

ClearActiveControl

Case 1 'Команда Copy.

CopyActiveControl

Case 2 'Команда Clear.

ClearActiveControl

Case 3 'Команда Paste.

PasteActiveControl

Case Else

frmFind.Show 'Показать диалоговое окно Find.

End Select

End Sub

тветствия проверяемого значения выражения и значений из всех списков операторов Case. Рассмотрим использование структуры Select Case на ранее приведенном примере. Предположим, что в меню добавлена команда Edit (Правка). Можно добавить оператор ElseIf, но лучше использовать конструкцию Select Case. Конструкция Select Case вычисляет выражение только один раз при входе в нее, а конструкция IfThenElse вычисляют различные выражения для каждого оператора ElseIf. Таким образом, конструкцию IfThenElse можно заменить конструкцией Select Case, только если оператор if и каждый оператор ElseIf при проверке условия выбора вычисляют одно и то же выражение.