Анимация
JavaScript
|
Главная Библионтека В этом примере для обеспечения ввода пользователем данных используется простейший вариант команды WAIT, которая приостанавливает работу программы и после нажатия пользователем какой-либо клавиши присваивает значение этой клавиши переменной, указанной в опции TO. В Visual Basic для записи этой команды надо использовать один из следующих эквивалентных вариантов синтаксиса: Do [{While Until} Expression] [Commands] [Exit Do] [Commands] Loop Do [Commands] [Exit Do] [Commands] Loop [{While Until} Expression] Как правильно использовать эту команду, видно из следующего примера: lCheck = True nCounter = 0 Do Первый (внешний) цикл Do While nCounter << 20 Второй (внутренний) цикл nCounter = nCounter + 1 If nCounter = 10 Then lCheck = False Exit Do Выход из второго цикла End If Loop Loop Until lCheck = False Выход из первого цикла 4. Если мы запишем в программу некую последовательность команд, то они будут выполняться построчно от начала до конца программы. Вряд ли таким образом мы сможем написать мощную программу, которая должна обрабатывать действия пользователя в зависимости от тех или иных условий. Нам потребуются средства для управления последовательностью выполнения команд. Наиболее простое ветвление программы в зависимости от заданного условия можно обеспечить командой, синтаксис которой в Visual FoxPro записывается в следующем виде: IF lExpression Commands [ELSE Commands] ENDIF В качестве условия может быть использовано любое выражение, в том числе и логическое. На месте команд, в свою очередь, может стоять снова команда IF (вложенное условие). Если выражение равно .T., то выполняются команды, заключенные между IF и ELSE. Если .F., то выполняются команды, следующие за ELSE, а в том случае, если эта необязательная опция ELSE в команде не используется, выполняются команды, следующие за ENDIF. В Visual Basic эту команду можно записать на одной строке: If lExpression Then Commands [Else Commands] или в более сложном виде: If Expression Then [ Commands] [ElseIf Expression n Then [Commands]] ... [Else [Commands]] End If Если выражение Expression имеет значение True, выполняются команды, следующие за ключевым словом THEN. В противном случае выполняется один из блоков, в котором Expression n будет соответствовать выражению Expression. Если и этого не произойдет, будет выполнен блок команд, следующих за ключевым словом ELSE. Для выбора по условию очень эффективно можно использовать функцию, которая по смыслу похожа на рассматриваемую команду и имеет совершенно одинаковый синтаксис как в Visual FoxPro, так и в Visual Basic IIF(lExpression, Expression1, Expression2) Возвращает значение Expression1, если lExpression =.T., и значение Expression2, если lExpression =.F.; Expression1 и Expression2 должны быть одного типа, например: TITLE = IIF(nSign=0,"автомобиль","автопоезд") + cModel Эта функция может использоваться и для выбора выполняемых подпрограмм, например: cProc var = IIF(nVid>>5,cProc 1,IIF(nVid<<2,cProc 2,cProc 3)) DO (cProc var) Здесь, в зависимости от значения переменной nVid, будет выполняться та или другая процедура, причем для увеличения числа вариантов в качестве Expression2 используется еще одна - вложенная функция IIF(). Использование этой функции для программного ветвления, там где это возможно, значительно увеличивает быстродействие программы и делает ее значительно меньше, чем при употреблении команды IF...ENDIF. 3. Более сложное ветвление, когда есть несколько условий, в зависимости от которых надо выполнить ту или иную группу команд, организуется стpуктуpной командой, которая в Visual FoxPro выглядит так: DO CASE CASE lExpression1 Commands [CASE lExpression2 Commands] [OTHERWISE Commands] ENDCASE Команда выполняет проверку условий, заданных в операторах CASE. Они просматриваются последовательно сверху вниз, и, как только первое из них оказывается верным (логическое выражение равно .T.), выполняется блок команд для этого CASE, после чего управление передается строке программы, следующей за ENDCASE. Если ни одно из условий не истинно, выполняется опция OTHERWISE, пpи отсутствии этой опции команда игнорируется. Например: nChoice = 3 DO CASE CASE nChoice = 1 ? "Выбрано значение 1" CASE nChoice = 2 ? "Выбрано значение 2" OTHERWISE ? "Выбрано неправильное значение!" RETURN ENDCASE В Visual Basic синтаксис этой структурной команды организован несколько по-иному: Select Case Expression [Case Expression n [Commands]] ... [Case Else [Commands]] End Select Выполняются те блоки CASE, в которых выражение Expression n соответствует выражению Expression. Если такого соответствия не обнаруживается, то выполняется блок CASE ELSE. Приведенный выше пример можно записать примерно так: Dim nChoice As Integer Select Case nChoice Case 1 Debug.Print "Выбрано значение 1" Case 2 Debug.Print "Выбрано значение 2" Case Else Debug.Print "Выбрано неправильное значение" End End Select 2. Цикл, помимо структуры DO WHILE, можно организовать и стандартным для большинства языков программирования способом. Поэтому следующая команда куда популярнее предыдущей: FOR MemVarName = nInitialValue TO nFinalValue [STEP nIncrement] Commands [LOOP] [EXIT] NEXT Команда FOR...NEXT обеспечивает выполнение блока команд для каждого значения переменной, начиная со значения, равного nInitialValue, до значения nFinalValue, пошаговое увеличение или уменьшение происходит на величину, заданную nIncrement, которая по умолчанию равна 1. Опция LOOP приводит к передаче управления на начало следующего цикла, а EXIT - к прекращению действия команды. В Visual Basic синтаксис этой команды выглядит очень похоже: For MemVarName = nInitialValue To nFinalValue [Step nIncrement] [Commands] [Exit For] [Commands] Next [MemVarName] По сравнению с Visual FoxPro здесь нет возможности "досрочно" начать новый цикл с помощью опции LOOP. Циклы FOR...NEXT могут быть вложены, но в этом случае в каждом цикле должен использоваться уникальный параметр MemVarName. В синтаксисе Visual FoxPro пример организации вложенного цикла приведен ниже. В переменную MyString десять раз записываются значения от 0 до 9. MyString = "" FOR Words = 10 TO 1 Step -1 FOR Chars = 0 To 9 MyString = MyString + STR(Chars) NEXT MyString = MyString + " " NEXT ? MyString В синтаксисе Visual Basic этот же пример будет иметь лишь незначительные отличия: Public Sub Main() For Words = 10 To 1 Step -1 For Chars = 0 To 9 MyString = MyString & Chars Next MyString = MyString & " " Next 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |