Иллюстрированный самоучитель по Visual Basic .NET

Select Case. GoTo.

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

Select Case average
Case Is > 90
Console.WriteLine("A")
Case Is > 80
Console. Wri teLi ne("B")
Case Is > 70
Console.WriteLine("C")
Case Else
Console.WriteLine("You fail")
End Select

Программисты с опытом работы на С и Java, обратите внимание – команда break не нужна, поскольку выполняется только одна секция Case. Дискретные наборы значений перечисляются через запятую, а ключевое слово То позволяет задавать интервалы:

Select Case yourChoice
Case 1 To 9
' Порядок
Case – 1. 0
' Неправильный ввод
End Select

GoTo

Говоря об управляющих конструкциях, нельзя обойти вниманием команду GoTo. Если перефразировать старую шутку, современные программисты делятся на три группы: те, кто не знает, как пользоваться GoTo, и знать не хочет; те, кто не знает, но переживает по этому поводу; и те, кто умеет ею пользоваться.

Частое использование GoTo приводит к многократным передачам управления и порождает "спагетти-код", который трудно читать и отлаживать. С другой стороны, в некоторые ситуациях применение GoTo делает программу более понятной и логичной – например, если в какой-то ситуации потребовалось выйти сразу из нескольких вложенных циклов. Команда Exit для этого не подходит, поскольку она завершает только текущий цикл.

Примечание
В данной ситуации вместо Goto можно воспользоваться перехватом исключений (см. главу 7), но некоторые программисты предпочитают классический подход
.

Чтобы воспользоваться командой GoTo в VB.NET, необходимо присвоить метку соответствующей строке. Метка начинается в первой позиции строки, ее первым символом является буква, а последним – двоеточие. Старайтесь присваивать меткам содержательные имена. Пример:

Bad-Input:
' Фрагмент, выполняемый при переходе

Предположим, в нашей программе данные вводятся во вложенном цикле For. Чтобы завершить ввод, пользователь вводит ZZZ:

SubMain()
Dim getData As String
Dim i, j As Integer
For i = 1 To 10
For j = 1 To 100
Console.Write("Type the data, hit the Enter key between " & _
"ZZZ to end: ") getData = Console. ReadLine()
If getData = "ZZZ" Then
Goto Bad Input Else
' Обработка данных
End If
Next j
Next i
Exit Sub
BadInput:
Console.WriteLine("Data entry ended at user request")
Console. ReadLine()
End Sub

Выходить из вложенного цикла командой Exit For неудобно – нам пришлось бы писать дополнительный код для выхода из внешнего цикла. Обратите внимание: команда Exit Sub предотвращает передачу управления помеченному коду после завершения обоих циклов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.