"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