Константы
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
ограничивается блоком, в котором
они были объявлены! Мораль: не
объявляйте переменные внутри
блоков, если для этого нет веских
причин.