LOOPS DE REPETICAO - QUAL O MELHOR?

USUARIO.EXCLUIDOS 15/01/2005 16:30:43
#60969
Dae galera do VB Mania
é o seguinte
Estou lendo alguns materiais sobre VB e tenho dúvidas acerca dos loops de repetição.
Internamente, quando o programa executa o loop, existe um tipo mais rápido do que o outro ou todos são iguais?
Qual seria o melhor? For, while do, while do - until... ou, internamente, todos tem o mesmo desempenho.
A Microsoft lançou algum relatório/documentação que comprove - verdadeiramente - qual desses laços é o mais eficiente?

Obrigado

T+
WEBMASTER 15/01/2005 16:39:05
#60972
kra, depende da situação que você está ...!!
USUARIO.EXCLUIDOS 16/01/2005 11:13:14
#61202
YOUNG_H4CK3R me dê algum exemplo de quando o while é mais rápido do que o For. Eu achei no livro Aprenda Visual Basic 5 em 24 horas que o melhor loop é aquele que "torna mais claro e limpo o teste compartativo". Do jeito que o livro apresenta, parece que é tudo igual... mas, se existe alguma diferença, gostaria que você me apontasse...
WEBMASTER 16/01/2005 11:18:54
#61203
bom...deixe-me pensar...hmmmm....


Dim X As Integer

Private Sub Form_Click()

For X = 0 To 100
X = X + 1
Next

MsgBox "X criado em : " & Timer & " milesimo de segundos com a clausula For"
End Sub

Private Sub Form_Load()

While X < 100
X = X + 1
Wend

MsgBox "X criado em : " & Timer & " milesimo de segundos com a Clausula While"

End Sub


Note que mesmo por poucos milésimos de segundos, While é mais rápido.
WEBMASTER 16/01/2005 11:21:14
#61204

Dim X As Integer, Tempo, Tempo1

Private Sub Form_Click()

For X = 0 To 100
X = X + 1
Next

Tempo1 = Timer
MsgBox "X criado em : " & Tempo1 & " milesimo de segundos com a clausula For"

MsgBox "A diferença entre as clausulas foi de : " & Tempo - Tempo1 & "."

End Sub

Private Sub Form_Load()

While X < 100
X = X + 1
Wend

Tempo = Timer
MsgBox "X criado em : " & Tempo & " milesimo de segundos com a Clausula While"

End Sub
WEBMASTER 16/01/2005 11:52:57
#61211
alias:


MsgBox "A diferença entre as clausulas foi de : " & Tempo1 - Tempo & "."
USUARIO.EXCLUIDOS 16/01/2005 12:06:09
#61212
Resposta escolhida
Willian, o seu teste é inválido e não prova nada pelos seguintes motivos:

1)
Citação:

For X = 0 To 100
X = X + 1
Next



Você sobrecarrega o For fazendo a soma X = X + 1 sendo que este incremento já é realizada implicitamente pela instrução For (isto altera a diferença entre o While e o For), além de alterar a valor da variavel que controla o laço de repetição, isto é um erro básico em programação e dependendo da operação pode ocasionar um loop infinito dificil de ser detectado. Neste exemplo o laço é executado 51 vezes ao invés de 101.

2) Teste o exemplo abaixo movendo o While para o evento Form_Load e o For para o evento Form_Click, e veja agora qual é o mais rápido ?

Dim X As Integer, Tempo, Tempo1

Private Sub Form_Click()
While X < 100
X = X + 1
Wend

Tempo = Timer
MsgBox "X criado em : " & Tempo & " milesimo de segundos com a Clausula While"

MsgBox "A diferença entre as clausulas foi de : " & Tempo - Tempo1 & "."
End Sub

Private Sub Form_Load()
For X = 0 To 100
' X = X + 1
Next

Tempo1 = Timer
MsgBox "X criado em : " & Tempo1 & " milesimo de segundos com a clausula For"
End Sub



ETERINO,
1) O uso For, While, Until deve ser adequado a uma determinada situação, imagine que vc queira percorrer um recordset aberto pelo ADO, qual laço de repetição vc irá usar ?
2) E se vc for repetir um conjunto de instruções até (Until) que uma determinada condição seja Falsa ?
3) E se vc for repetir um conjunto de instruções enquanto (While) uma determinada condição for Verdadeira ?
4) E se vc for repetir um conjunto de instruções 20 vezes (For) ?

Eu acho dificil medir performance em laços de repetição, use o que melhor se adequar a determinada situação.
WEBMASTER 16/01/2005 12:18:22
#61216
afff...rssrs
Tópico encerrado , respostas não são mais permitidas