18c0693f

Оператор варианта Select Case


Суть оператора. У авторов языков программирования есть похвальное стремление сделать язык попроще, попонятнее. Они с ужасом взирают на многочисленные «иначе если» и логические операции и стараются, где можно, от них избавиться. Возьмем, например, такую задачу: Компьютер спрашивает школьника, какую он получил отметку по физике, и реагирует на нее подходящим текстом. Вот программа без нововведений, использующая If:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Otmetka As Integer = InputBox("Какую отметку ты получил по физике?")

        If Otmetka = 1 Or Otmetka = 2 Then

            MsgBox("Кошмар!")

        ElseIf Otmetka = 3 Then

            MsgBox("Неважно")

        ElseIf Otmetka = 4 Then

            MsgBox("Неплохо")

        ElseIf Otmetka = 5 Then

            MsgBox("Молодец!")

        Else

            MsgBox("Таких отметок не бывает")

        End If

End Sub

Здесь может вызвать раздражение слишком часто встречающееся имя Otmetka, а также то, что и в такой простой задаче не обошлось без логических операций. Хорошо бы программу можно было писать попроще, например, так (по-русски):

Выбери вариант отметки

      Вариант     1, 2            

             говори "Кошмар!"

      Вариант     3         

             говори "Неважно"

      Вариант     4         

             говори "Неплохо"

      Вариант     5         

             говори "Молодец!"

      Вариант     остальное      

             говори "Таких отметок не бывает"

Конец выбора

И такой оператор варианта был придуман и назван Select Case, что и означает в переводе ВЫБЕРИ ВАРИАНТ. Теперь я просто-напросто переписываю русский вариант программы по-английски:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim Otmetka As Integer = InputBox("Какую отметку ты получил по физике?")


        Select Case Otmetka
            Case 1, 2
                MsgBox("Кошмар!")
            Case 3
                MsgBox("Неважно")
            Case 4
                MsgBox("Неплохо")
            Case 5
                MsgBox("Молодец!")
            Case Else
                MsgBox("Таких отметок не бывает")
        End Select
End Sub
Логика работы Select Case абсолютно такая же, как и у многострочного If. В процессе исполнения оператора компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными в вариантах, сверху вниз. Наткнувшись на совпадающее значение, он выполняет операторы, стоящие в этом варианте. На этом исполнение оператора Select Case завершается. Если же совпадающего значения так и не нашлось, то выполняются операторы, стоящие в варианте Case Else (в нашей программе он полезен на тот случай, если ученик – угрюмый мечтатель и вводит число 6).
Возможности оператора. Оператор Select Case предоставляет более широкие возможности, чем рассмотренные в только что приведенном примере. Проиллюстрируем их:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim a, k As Double
        a = 3
        Select Case a * a + 1
            Case 8, 4 * a - 3, 26
                k = 0
                Debug.WriteLine(k)
                Debug.WriteLine(a)
            Case 7, 9 To 12
                k = 1
                Debug.WriteLine(k)
            Case Is < 0, 2, 4, 2.57 To 1.8 + a, 44, 68, Is > 100 + a
                k = 3
        End Select
End Sub
Эта программа напечатает 1. Здесь мы видим несколько новых для нас элементов: