"Faire Tout" "Loop" et "Tout" "Wend" en Boucle. Quelle est la différence?
Lecture de certaines réponses dans stackoverflow, j'ai vu un while
wend
boucle. Je suis habitué à l' do while
loop
, donc je me demandais quelle serait la différence entre ces deux boucles.
j'ai fait quelques tests (code ci-dessous) et les deux semblent me donner les mêmes résultats.
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
3 réponses
Une réponse que j'ai évoqué n'est plus visible, mais cette réponse est toujours valable. While/Wend est une gueule de bois de Base et N'/Boucle doit être votre préféré la syntaxe parce que:
- Il prend en charge la vérification de la condition avant entrer dans la boucle
Do While [condition] ... Loop
(zéro, un ou plusieurs exécutions de la boucle) - Il prend en charge la vérification de la condition après entrer dans la boucle
Do ... Loop While [condition]
(une ou plusieurs exécutions de la boucle) - il supporte Non condition spécifique
Do ...(some logic) (Exit Do) ... Loop
(une ou plusieurs exécutions de la boucle, potentiellement infini)
je ne pense pas qu'il y est beaucoup de différence dans leur exécution, autres que la syntaxe des options While Wend
n'est pas capable de:
Do
someCode
While (someCondition)
en ce qui concerne la vitesse, j'ai fait un test simple:
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
Résultats:
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
en fait, vous n'avez pas besoin de "DO WHILE" puisque vous pouvez "DO-LOOP" sans "While".
j'utilise "Do LOOP" si j'ai besoin d'effectuer une action au moins une fois (ou plusieurs fois) sans condition implicite, comme le fait le WHILE-WEND.
Juste pour un exemple, une sorte de réveil:
Do
Display Time at screen
Sounds a buzz
if user confirm
exit do
end if
Loop