"Do While" "Loop" и "While" "Loode" Loop. Какая разница?

Чтение некоторых ответов в stackoverflow я увидел цикл while wend. Я привык к do while loop, поэтому мне было интересно, какая разница между этими двумя циклами.

Я провел некоторое тестирование (код ниже), и оба, похоже, дали мне те же результаты.

Sub test_loop_1()
Dim i As Integer
i = 1
Do While i < 10
    Cells(i, 1) = i
    i = i + 1
Loop

End Sub

Sub test_loop_2()
Dim i As Integer
i = 1
While i < 10
    Cells(i, 1) = i
    i = i + 1
Wend

End Sub

Ответ 1

Ответ, о котором я говорил, уже не виден, но этот ответ по-прежнему сохраняется. Пока /Wend - похмелье от Basic и Do/Loop должно быть вашим предпочтительным синтаксисом, потому что:

  • Он поддерживает проверку условия до ввода цикла Do While [condition] ... Loop (ноль или более циклов)
  • Он поддерживает проверку условия после ввода цикла Do ... Loop While [condition] (одно или несколько циклов)
  • Он не поддерживает специфическое условие Do ...(some logic) (Exit Do) ... Loop (одно или несколько циклов, потенциально бесконечное)

Ответ 2

Я не думаю, что есть большая разница в их исполнении, кроме синтаксических опций, которые While Wend не способна:

Do
    someCode
While (someCondition)

Что касается скорости, я сделал простой тест:

Sub whileLoopTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

While (i < 500000000)
    j = i + 2
    i = i + 1
Wend

Debug.Print "While execution time: " & Timer - StartTime
End Sub


Sub doWhileTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

Do While (i < 500000000)
    j = i + 2
    i = i + 1
Loop

Debug.Print "Do While execution time: " & Timer - StartTime
End Sub

Результаты:

While execution time: 6,429688  
While execution time: 6,429688
While execution time: 6,441406
Do While execution time: 6,429688
Do While execution time: 6,449219
Do While execution time: 6,4375

Ответ 3

На самом деле вам не нужно "DO WHILE", так как вы можете "DO-LOOP" без "Пока".

Я использую "DO LOOP", если мне нужно выполнить действие хотя бы один раз (или несколько раз) без каких-либо неявных условий, так как WHILE-WEND oblies.

Просто для экземпляра, своего рода будильник:

  Do
    Display Time at screen
    Sounds a buzz
    if user confirm
       exit do
    end if
  Loop