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 предотвращает передачу управления помеченному коду после завершения обоих циклов.