Организация циклов

Циклы позволяют выполнять один и тот же блок кода несколько раз. Выполнение некоторых циклов происходит до тех пор, пока условие не станет равным False. Другие циклы выполняются до тех пор, пока условие не станет True. Также существуют циклы, тело которых выполняется заданное количество раз.


VBScript поддерживает следующие инструкции цикла:




Do…Loop


Инструкция используется для выполнения цикла неопределённое количество раз. Тело цикла выполняется либо до тех пор, пока условия равно True, либо до тех пор, пока условие не равно True.


Выполнение до тех пор, пока условия равно True


Для проверки условия инструкции используется ключевое слово While. Условие выполнения может быть проверено до входа в цикл, или сразу после первого прохода его тела. В приведённой ниже процедуре ChkFirstWhile(), если значению переменной myNum присвоить 9 вместо 20, цикл выполнен не будет; тело цикла процедуры Sub ChkLastWhile() выполняется только один раз, поскольку условие выполнения уже равно False.


Sub ChkFirstWhile()

  Dim counter, myNum

  counter = 0

  myNum = 20

  Do While myNum > 10

    myNum = myNum - 1

    counter = counter + 1

  Loop

  MsgBox "The loop made " & counter & " repetitions."

End Sub


Sub ChkLastWhile()

  Dim counter, myNum

  counter = 0

  myNum = 9

  Do

    myNum = myNum - 1

    counter = counter + 1

  Loop While myNum > 10

  MsgBox "The loop made " & counter & " repetitions."

End Sub


Выполнение цикла до тех пор, пока условие не станет равным True


Существует два способа использования ключевого слова Until для проверки условия цикла. Первый способ: указание ключевого слова до входа в тело цикла (ChkFirstUntil). Второй способ: указание ключевого слова в конце тела цикла, при этом цикл будет выполнен хотя бы один раз (ChkLastUntil). Выполнение цикла происходит до тех пор, пока условие равно False.


Sub ChkFirstUntil()

  Dim counter, myNum

  counter = 0

  myNum = 20

  Do Until myNum = 10

    myNum = myNum - 1

    counter = counter + 1

  Loop

  MsgBox "The loop made " & counter & " repetitions."

End Sub


Sub ChkLastUntil()

  Dim counter, myNum

  counter = 0

  myNum = 1

  Do

    myNum = myNum + 1

    counter = counter + 1

  Loop Until myNum = 10

  MsgBox "The loop made " & counter & " repetitions."

End Sub


Прерывание выполнения цикла


Совершить преждевременный выход из выполнения Do…Loop можно, используя инструкцию Exit Do. Поскольку инструкция прерывания цикла предназначена для избежания зацикливаний, её следует помещать в блок выполнения при истинности условия инструкции If…Then…Else.


В предлагаемом примере значение переменной myNum выбрано таким образом, что она вызывает зацикливание. Инструкция If…Then…Else проверяет переменную на предмет подобной ситуации и, если условие зацикливание выявлено, вызывает прерывание цикла.


Sub ExitExample()

  Dim counter, myNum

  counter = 0

  myNum = 9

  Do Until myNum = 10

    myNum = myNum - 1

    counter = counter + 1

    If myNum < 10 Then Exit Do

  Loop

  MsgBox "The loop made " & counter & " repetitions."

End Sub



While…Wend


Инструкция While…Wend поддерживается VBScript для разработчиков, которые ознакомлены с принципами её использования. Однако рекомендуется придерживаться циклов Do…Loop из-за недостаточной гибкости этой инструкции.



For…Next


Инструкция применяется для выполнения блока кода определённое количество раз. Для организации цикла заводится специальная переменная-счётчик, значение которой либо увеличивается, либо уменьшается на каждой итерации.


В примере приводится процедура MyProc, которая вызывается 50 раз. В инструкции For определена переменная-счётчик, её начальное и конечное значения. Инструкция Next определяет величину прибавки 1 к переменной-счётчику на каждой итерации.


Sub DoMyProc50Times()

  Dim x

  For x = 1 To 50

    MyProc

  Next

End Sub


Ключевое слово Step увеличивает или уменьшает величину счётчика на величину прибавки. В примере счётчик j на каждой итерации цикла увеличивается на 2. После выполнения цикла вычисляемая сумма будет состоять из 2+4+6+8+10.


Sub TwosTotal()

  Dim j, total

  For j = 2 To 10 Step 2

    total = total + j

  Next

  MsgBox "The total is " & total

End Sub


Для того чтобы уменьшать значение счётчика, следует использовать отрицательное значение Step. Конечное значение счётчика при этом должно быть меньше начального. Ниже в примере, счётчик myNum последовательно уменьшается на 2 на каждой итерации. По окончанию цикла вычисляемая сумма будет состоять из 16+14+12+10+8+6+2.


Sub NewTotal()

  Dim myNum, total

  For myNum = 16 To 2 Step -2

    total = total + myNum

  Next

  MsgBox "The total is " & total

End Sub


Прервать цикл прежде, чем значение счётчика выйдет за границу конечного значения, можно, используя инструкцию Exit For. Поскольку инструкция прерывания цикла предназначена для избежания зацикливаний, её следует помещать в блок выполнения при истинности условия инструкции If…Then…Else.


Created with the Freeware Edition of HelpNDoc: Single source CHM, PDF, DOC and HTML Help creation