Константы

VB .NET позволяет создавать именованные константы для значений, остающихся постоянными на протяжении всей работы программы. Константы объявляются по аналогии с переменными, а их имена подчиняются тем же правилам: до 255 символов, начинаются с буквы, после которой следует произвольная комбинация букв, цифр и символов подчеркивания. В книге имена констант записываются прописными буквами.

В VB .NET при активизации жесткой проверки типов необходимо явно указывать тип констант:

Const PIE = 3.14159 ' Не будет компилироваться с Option Strict

Const PIE As Double = 3.14159 ' Правильно, но Math.PI лучше :-)

Значение констант может определяться числовыми выражениями, в том числе и содержащими ранее определенные константы:

Const PIE_OVER_2 As Double = PIE / 2

Аналогичным образом определяются строковые константы:

Const USER_NAME As String = "Bill Gates"

.NET Framework содержит немило встроенных, заранее определенных глобальных констант, которые вы можете использовать в своих программах. Многие из них аналогичны константам VB6 с префиксом vb, но они являются членами различных классов, поэтому обращения к ним выглядят несколько иначе. Например, константа vbCrLf в VB .NET принадлежит классу ControlChars, поэтому при обращении к ней используется запись Control Chars. CrLf.

 

Циклы

В VB .NET, как практически во всех языках программирования, существуют циклы — конструкции, позволяющие выполнять операции заданное количество раз или продолжать, пока выполняется (или наоборот, не выполняется) некоторое логическое условие. По сравнению с прежними версиями VB синтаксис циклов мало изменился. В частности, изменилась конструкция While/Wend, но это изменение к лучшему.

 

Цикл с определенным условием

Цикл, выполняемый заданное количество раз, определяется при помощи ключевых слов For и Next. Например, следующая программа выводит в консольном окне числа от 1 до 10:

Sub Main()

Dim i As Integer

For i = 1 To 10

Console.WriteLine(i)

Next 1

Console.ReadLine()

End Sub

Обычно переменной-счетчику присваивается начальное значение, после чего проверяется, не превышает ли текущее значение счетчика конечное. Если счетчик превысил конечное значение, тело цикла не выполняется. Если текущее значение меньше конечного, VB .NET выполняет последующие команды до тех пор, пока не встретит ключевое слово Next (указывать имя переменной в команде Next необязательно). По умолчанию счетчик увеличивается на 1, и все начинается заново. Процесс продолжается до тех пор, пока при очередной проверке не окажется, что счетчик превысил конечное значение. В этот момент цикл завершается, и управление передается следующей за ним команде.

Хотя в качестве счетчика может использоваться числовая переменная любого типа, ре-комендуется использовать переменные типа Integer. В этом случае VB .NET тратит минимальное количество времени на изменение счетчика, что ускоряет выполнение цикла.

Единичное приращение счетчика, используемое по умолчанию, иногда неудобно—в некоторых ситуациях счетчик должен изменяться на 2, на дробную величину или в обратном направлении. Как и во всех прежних версиях VB, нестандартное приращение указывается в цикле For-Next с ключевым словом Step.

Следующая программа имитирует обратный отсчет перед запуском космического корабля:

Sub Main()

Dim i As Integer

For i = 10 To 1 Step =1

Console.WriteLine("It's t minus " & i & " and counting.")

Next i

Console.WriteLine("Blastoff!")

Console. ReadLine()

End Sub

При отрицательном приращении тело цикла For-Next игнорируется в том случае, если начальное значение счетчика меньше конечного. Это очень удобно при выполнении таких операций, как удаление элементов из списка. Если бы отсчет велся от 0 до ListCount, то на середине произошло бы обращение к удаленному элементу, тогда как при отсчете от ListCount до 0 с шагом -1 элементы нормально удаляются от последнего к первому.

Значение Step может относиться к любому числовому типу. Пример:

for yearlylnterest = .07 То .09 Step .00125D

Цикл перебирает значения от 7 до 9 процентов с приращением в 1/8 процента. Обратите внимание на использование типа Decimal для предотвращения ошибок округления.

VB .NET, как и прежние версии VB, позволяет создавать вложенные циклы практически неограниченной глубины. Следующий фрагмент выводит таблицу умножения с простейшим форматированием:

Sub Main()

Dim i, j As Integer

For j = 2 To 12

For i = 2 To 12

Console.Writed * j & " ")

Next i

Console. WriteLine()

Next j

Console ReadLine()

End Sub

Во внутреннем цикле вместо метода WriteLine используется метод Write, чтобы избежать перевода строки при выводе соседних элементов.

 

Циклы с неопределенным условием

Довольно часто условие продолжения цикла зависит от результатов, полученных в теле цикла. Следующая конструкция используется в VB .NET для построения цикла с неопределенным условием, тело которого выполняется минимум один раз (завершающая проверка):

Do

' Команды VB .NET (0 и более)

Until условие_выполняется

Конечно, условие не ограничивается простой проверкой равенства. В вашем распоряжении операторы сравнения, перечисленные в табл.3.10.

Таблица 3.10. Операторы сравнения

Символ
Проверяемое условие
<>
Не равно
<
Меньше
<=
Меньше или равно
>
Больше
>=
Больше или равно

Строковые операнды по умолчанию сравниваются в соответствии с порядком символов Unicode. Таким образом, «А» предшествует «В», но «В» предшествует «а» (а пробел предшествует любому печатному символу). Строка «aBCD» предшествует строке «CDE» (то есть считается «меньше» ее), поскольку прописные буквы в кодировке стоят раньше строчных.

Как и в VB6, вы можете игнорировать регистр символов во всех сравнениях модуля или формы; для этого в начало модуля или формы включается команда Option Compare Text. Команда Option Compare Binary возвращается к стандартному сравнению строк в соответствии с положением символов в кодировке ANSI. При активном режиме Option Compare Text используется порядок символов для страны, указанной при установке системы Windows.

Ключевое слово Unti 1 можно заменить ключевым словом Whi I e (при этом следует заменить условие на противоположное). Например, фрагмент

Do

' Команды VB .NET (0 и более)

Loop Until X <> String.Empty

эквивалентен следующему фрагменту:

Do

' Команды VB .NET (0 и более)

Loop While X = String.Empty

Обратите внимание на использование константы String.Empty вместо пустой строки "", менее наглядной и чаще приводящей к ошибкам. Если переместить ключевое слово Whi 1е или Unti 1 в секцию Do, проверка будет выполняться в начале цикла (и при ложном условии цикл не будет выполнен ни одного раза). Пример:

Do While Text1.Text <> String.Empty

' Обработать непустой текст Loop

Условия объединяются при помощи операторов Or, Not и And. Пример:

Do While count < 20 And savings < 1000000

Если вы предпочитаете использовать старую конструкцию While-Wend, учтите, что клю-чевое слово Wend было заменено командой End While.

 

Условные команды и принятие решений

" В VB .NET условная команда If, как и в VB6, существует в двух версиях — однострочной и многострочной:

If X < 0 Then Console.WriteLine("Number must be positive!")

Условие конструкции If-Then может содержать логические операторы And, Or и Not. Довольно часто программа выполняет разные действия в зависимости от того, окажется ли условие истинным или ложным. В этом случае базовая форма команды

If-Then:

If условие Then

' Команды VB .NET (0 и более) End If

дополняется одной или несколькими секциями El se:

If условие Then

' Команды VB .NET (0 и более) Else

' Команды VB .NET (0 и более)

End If

Несколько последовательных проверок в секциях Else можно оформить в виде конструкции Elself:

If условие Then

' Команды

Elself условие Then

' Команды

Elself условие Then

' Команды

Else

' Команды

End If

Конструкция If-Then может использоваться для преждевременного выхода из цикла — для этого она объединяется с командой Exit Do или Exit For. Встретив команду Exit Do или Exit For, VB .NET немедленно завершает цикл и продолжает выполнение программы с команды, следующей за ключевым словом Loop или Next (в зависимости от типа цикла).

 

Изменения в видимости переменных

Область видимости переменных и методов в VB .NET определяется по более сложным правилам, чем в прежних версиях VB. Эта тема подробно описана в главах 4 и 5. В частности, изменения проявляются при объявлении переменных в теле цикла или блока If-Then. Такие переменные невидимы за пределами блока, в котором они были объявлены. Например, в следующем фрагменте мы выбираем одну из двух версий строковой переменной Ri sk и затем пытаемся использовать ее:

If income < 100000 Then

Dim risk As String = "too much risk" Else

Dim risk As String = "love to make a deal"

End If

Console.WriteLine("Your risk level is " & Risk)

На экране появляется сообщение об ошибке:

The name 'risk' is not declared.

Видимость обеих версий переменной risk ограничивается блоком, в котором они были объявлены! Мораль: не объявляйте переменные внутри блоков, если для этого нет веских причин.