Newsgroup: it.comp.lang.visual-basic
Titolo: Info su While, DoLoop, For...

Ciao a tutti,
volendo fare un ciclo che trova da una serie di elementi il primo valido e
a quel punto esce cosa č meglio usare?
Io speso uso il For con Exit For ma credo non sia la migliore/piů elegante
For i=0 to MAX
  if cond=True then
	valore=i
	exit for
  endif
next i
Oppure
bOk=False
Do Until Not bOk
  if cond=true then bOk=True
Loop
Oppure l'equivalente in While?
Inoltre solitamente come usate il Do?
Do
Loop Until Condizione
Do Until Condizione
Loop
'Questa credo la "peggiore"
Do
  if condizione then exit Do
Loop
Tnx
-- 
DBMS Firebird
VB6 + Ado

è sempre consigliabile un ciclo do per ste cose.
il for lascia dichiarata la variabile e rimane in memoria!
per ste cose appoggio il ciclo DO
la condizione non importa... o sopra o sotto e until o while..
in base al momento e a cosa ti serve.metti le condizioni...
figurati io le metto in base al tempo..
se piove allora do until
se cè il sole do while
se sono assonnato..... nè una nè l'altra spengo e dormo!!! :-) 

 per ste cose appoggio il ciclo DO
Ecco come pensavo.
Un'altra cosa in una sub se avete
Private Sub Pippo
Dim i as long, bOk as boolean
[1 paginata di codice)
i=0: bOk= False
Do until Not Ok
  '#1 if Pippo=Pluto then bOk=True
  '#2 bOk=(Pippo=Pluto)
  i=i+1
Loop
end Sub
Usate la #1 o la #2 (io decodifico mentalmente meglio la #1).
Inoltre le dichiarazioni le metto sempre sotto il Private Sub mentre ho
visto che qualcuno le dichiara sopra il do Loop, ma non mi piace molto
(rischi dichiarazioni doppie ecc.)


 (rischi dichiarazioni doppie ecc.)
io metto sotto private sub le dichiarazioni che sono certo di dover usare
nel tuo esempio sei sicuro di dover usare quelle variabili e le definisci in 
alto!
ma se mentre sviluppo mi accorgo che mi serve un altra (o 2  o 3) variabili
di appoggio non mi creo problemi di dove le dichiaro!
secondo me il trucco sta nel trovare un nome coinciso ma significativo delle 
variabili.
e non uso nessun tipo di underscore ( _ ) perchè ben sai che VB gli eventi 
li separa con _ quindi evito di crearmi casini! :-) 

Per non dichiarare due volte la stessa variabile usa
Option Explicit        '''''nelle dichiarazioni generali del form

 (rischi dichiarazioni doppie ecc.)
Queste soluzioni mi sembrano solo una masturbazione mentale.
La condizione dovrebbe stare nel Do:
Do While Pippo <> Pluto
    ...
Loop
Personalmente preferisco il While all'Until perchè l'Until costringe a una 
valutazione negata, cosa che la mente fatica a effettuare (sempre per la 
leggibilità).
Per uscire "preventivamente" dal loop uso generalmente un Exit Do.
Ciao 

 bok=iif(pluto=pippo,true,false)
Questo non mi piace :)
Soprattutto perchč le condizioni spesso sono un po' piů complesse di quella
:D


 Option Explicit        '''''nelle dichiarazioni generali del form
Sisi, darebbe comunque errore anche senza Option Explicit (anche se non in
fase di compilazione.
Preferisco tutto in alto per evitare di andar a cercare variabili in giro.


 Per uscire "preventivamente" dal loop uso generalmente un Exit Do.
Ok, tnx :)


non ti do' la risposta ma ti do tre riflessioni:
con for sicuramente prima o poi esci
con gli altri teoricamente rischi l'infinito
ho un ricordo flebilissimo di aver letto che i for
sono meglio 
perchč i loop (o while) scompongono la iterazioni a 
come la esegue il for per cui č un passaggio in piů
(ma sono un po' annebbiato su tale ricordo)
estendi il limite superore,
cronometra (con cronometro alla mano come faccio io)
e vedi chi va piů veloce

 (ma sono un po' annebbiato su tale ricordo)
E' esattamente così: il ciclo for è decisamente più veloce del do... in ogni caso questa valutazione ha senso solo se si sta utilizzando una funzione molto "time critical", altrimenti dovrebbe prevalere la leggibilità del codice.
Per spaccare il capello in quattro, riguardo ai due-quattro bytes di memoria sprecata è sufficiente utilizzare sempre lo stesso nome di variabile per i cicli for (i%), in questo modo, anche se se ne usano molti, è come utilizzarne sempre uno solo.

 molti, è come utilizzarne sempre uno > solo.
Sì, ma non ha senso stare a guardare queste cose: abbiamo un SO che come 
parte si cucca 120Mb, la tua app altri 50 su un sistema che ha tutta una 
gestione della memoria virtuale e del caching e tu stai a guardare 4 
(quattro! in .Net, in vb6 sono 2!) byte in una funzione che quando uscirà 
dallo scope verranno comunque rilasciati?
Ciao