А куда без логики ? часть 2
Во второй части статьи "A куда без логики?" , мы познакомимся с логическим блоком Select Case-End Select. В принципе можно обойтись без этого блока, ведь блок IF-ENDIF универсален, но есть некоторые вещи, которые в блоке Select Case - End Select делаются намного удобнее. Начнем с простейшей блок схемы:
SELECT CASE проверяемая переменная
CASE значение(я), сравниваемое со значением в переменной
команды если значение(я) совпало и выход из блока
CASE следующее значение(я) сравниваемое со значением в переменной
команды если значение(я) совпало и выход из блока
CASE ELSE
команды по умолчанию, выполнятся только, если ни одно из значений выше не совпало
END SELECT
Блок объявляется с команды из двух слов SELECT CASE , после идет имя переменной или вычисления, заканчивается тоже командой из двух слов END SELECT. Внутри блока идут сравнивающие команды CASE и одна необязательная CASE ELSE (означающая по умолчанию). Действует это так, как и в случаях с IF - ENDIF, сравнение идет сверху вниз. Сначала первая команда CASE сравнивает свое значение (записанное после него) со значением проверяемой переменной, записанной после SELECT CASE .
Если результат истинный:
то выполняются команды, идущие на следующей строчке до следующей команды CASE или CASE ELSE или CASE IS или END SELECT и происходит выход из блока. То есть остальные нижние CASE не сравниваются.
Если же команда CASE после сравнения возвращает ложный результат:
то сравнение переходит к следующей существующей команде CASE или CASE IS или CASE ELSE.
Замечу, что сравнивающих команд CASE или CASE IS , может быть столько, сколько вам требуется, но команда CASE ELSE всегда одна. После нее в строке, не надо задавать каких либо значений.
Кроме того, в блок схеме я написал не зря таким форматом: значение(я), поскольку сравнивать можно не только одно значение, а несколько через запятую (1,2,3,4) или диапазон значений (1 TO 9). Вспомогательный оператор TO как раз для указания, что используется диапазон значений а не 2 числа:
CASE 1 TO 5
CASE 1,2,3,4,5
Записи эквивалентны.
С другой стороны через запятую можно записать не по порядку: CASE 1,6,19
Сравнение нескольких значений, записанных после команды CASE, происходит слева направо. Как только результат окажется истинным, остальные значения не сравниваются. Выше я написал еще одну команду CASE IS. Эта команда позволяет сравнивать не только на равенство, но и на больше , меньше и т. п. А теперь несколько простых примеров.
ПРИМЕР_1:
Dim A As Ubyte =2 Select Case A Case 1 Print "A=1" Case 2 Print "A=2" Case Else Print "A=0" End Select Sleep
ПРИМЕР_2:
Select Case 55+122 Case 300 Print "Value=300" Case 200 Print "Value=200" Case 177 Print "Value=177" End Select Sleep
ПРИМЕР_3:
Select Case (12*3)+64 Case 15*2 Print "Value=30" Case 120-50 Print "Value=70" Case 2*50 Print "Value=100" End Select Sleep
ПРИМЕР_4:
Dim A As Ubyte =20 Select Case A Case 2,4,6,8,10 Print "Found to be one of 2,4,6,8,10" ' найдено среди чисел 2,4,6,8,10 Case 12,15,20 Print "Found to be one of 12,15,20" ' найдено среди чисел 12,15,20 Case Else Print "Not found" 'Не найдено End Select Sleep
ПРИМЕР_5:
Dim A As Ubyte =15 Select Case A Case 1 To 10 Print "Value is in the range of 1 to 10" ' значение в диапазоне от 1 до 10 Case 11 To 20 Print "Value is in the range of 11 to 20" ' значение в диапазоне от 11 до 20 Case Else Print "Not found" 'Не найдено End Select Sleep
ПРИМЕР_6:
Dim A As Ubyte =15 Select Case A Case Is <5 Print "A<5" Case Is >=15 Print "A>=15" Case Else Print "Not found" 'Не найдено End Select Sleep
Я думаю, что вы уже с достоинством сумели оценить блок SELECT CASE - END SELECT . А теперь общие объединяющиеся
возможности для блоков IF - ENDIF и SELECT CASE - END SELECT . Вы можете вкладывать в любой
из блоков множество других блоков сравнения в
неограниченном кол-ве.
ПРИМЕР_1:
Dim As Ubyte A=15 , C=10 Select Case A Case 5 Print "A=5" Case 15 If C=10 Then Print "A=15 and C=10" End Select Sleep
ПРИМЕР_2:
Dim As Ubyte A=15 , C=10 If A=10 Then Print "A=10" Else Select Case C Case 10 Print "C=10" End Select Endif Sleep
Пожалуй мы рассмотрели все, что касается основных моментов, связанных с логическими блоками. Всего доброго!
содержание | назад | вперед