В VB.NET имеются следующие условные структуры:
If ... Then
Select Case
Конструкция If ... Then проверяет истинность некоторого условия и зависимости от результатов проверки выполняет определенный код:
Dim num1 As Integer = 10 Dim num2 As Integer = 9 If (num1 > num2) Then Console.WriteLine("Число {0} больше числа {1}", num1, num2) End If
Здесь проверяем, больше ли число num1 числа num2, и если num1 больше чем num2. то выводим сообщение. Но, допустим, мы захотим, чтобы в случае невыполнения этого условия тоже совершалось какое-нибудь действие. Тогда мы добавляем выражение Else и после него определяем те действия, которые будут совершаться, если программа не удовлетворяет условию в выражении If. Например, мы будем выводить сообщение, что первое число меньше второго:
Dim num1 As Integer = 10 Dim num2 As Integer = 9 If (num1 > num2) Then Console.WriteLine("Число {0} больше числа {1}", num1, num2) Else Console.WriteLine("Число {0} меньше числа {1}", num1, num2) End If
Но как вы уже заметили, мы сделали немного неправильно. Так как первое число может быть не только больше или меньше второго: оба числа могут быть равны друг другу. В этом случае мы можем определить альтернативные условия с помощью ключевого слова ElseIf:
Dim num1 As Integer = 10 Dim num2 As Integer = 9 If (num1 > num2) Then Console.WriteLine("Число num1 больше числа num2") ElseIf num1 < num2 Then Console.WriteLine("Число num1 меньше числа num2") Else Console.WriteLine("Число num1 равно числу num2") End If
или так:
Dim R As New Random() Dim num1 As Integer = R.Next(100) If num1 = 1 Then Console.WriteLine("Число num1 равно 1") ElseIf num1 = 2 Then Console.WriteLine("Число num1 равно 2") ElseIf num1 = 3 Then Console.WriteLine("Число num1 равно 3") Else Console.WriteLine("Число num1 больше 3") End If
В данном примере мы использовали генератор случайных чисел, который представлен классом Random.
Строка Dim R As New Random()
выполняет инициализацию генератора случайных чисел. А в следующей строке Dim num1 As Integer = R.Next(100)
мы присваиваем числу num1 случайное значение, которое выдаст нам генератор, причем в качестве максимально возможного значения выбрано число 100.
Конструкция Select Case подобна в конструкции If...Then, так как позволяет обрабатывать сразу несколько условий. После слов Select Case указывается сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после оператора Case. И в случае если значения совпали, то выполняется блок команд, помещенных после данного оператора Case. Конструкция завершается словами End Select. Если мы хотим определить действия, которые будут выполняться, если совпадений не выявлено, то мы можем использовать оператор Case Else, после которого помещаем блок действий по умолчанию. Блок Case Else необязателен и может не употребляться Так, мы можем переписать предыдущий пример с помощью Select Case:
Dim R As New Random() Dim num1 As Integer = R.Next(100) Select Case num1 Case 1 Console.WriteLine("Число num1 равно 1") Case 2 Console.WriteLine("Число num1 равно 2") Case 3 To 25 Console.WriteLine("Число num1 находится на отрезке от 3 до 25") Case Else Console.WriteLine("Число num1 больше 25") End Select
Здесь мы также генерируем случайное число и последовательно сравниваем его значения. Обратите внимание на строку Case 3 To 25
-
здесь мы задаем целый диапазон значений от 3 до 25. Также обратите внимание, что если будет найдено совпадение с одним из выражений Case,
то остальные выражения Case рассматриваться не будут. То есть следующий код отработает только для выражения Case 1
, после чего
программа осуществит выход из Select Case, несмотря на то, что новое значение числа совпадает с значением в следующем выражении Case:
Dim num2 As Integer = 1 Select Case num2 Case 1 Console.WriteLine("Число num2 равно 1") num2 += 1 Case 2 Console.WriteLine("Число num2 равно 2") num2 += 1 Case 3 To 25 Console.WriteLine("Число num2 равно 3") End Select
Ну и в конце говоря об условных конструкций нельзя не упомянуть и оператор GoTo. Этот оператор требует после себя указание метки, на которую осуществляется переход. Например:
Dim time As String = "day" If time = "day" Then GoTo M1 Else GoTo M2 End If M1: Console.WriteLine("Hello World") M2: Console.WriteLine("Good Bye World")
Как показывает практика, начинающие часто злоупотребляют использованием этого оператора, что приводит к написанию некрасивого и непонятного кода. Поэтому рекомендуется использовать данный оператор как можно реже и по возможности обходиться без него.