Newsgroup: it.comp.java
Titolo: cosa è meglio??

Ciao,
volevo sapere in che modo è preferibile scrivere questo codice:
String a;
while(condizione){
   a = ......
}
oppure
while(condizione){
   String a = ......
}
uso a solo all'interno del ciclo while.
Le dichiarazioni all'interno del while quanto pesano?
Ciao
Sergio
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Le dichiarazioni all'interno del while quanto pesano?
Niente di piu' di una fuori. La posizione di una dichiarazione e' rilevante 
solo per il typecheck statico fatto dal compilatore.
-- 
You dont know what to do when you dont know what you're doing.
http://space.tin.it/computer/csadun


sarà ma in un programma che volevo rendere più veloce e che fa centinaia di
migliaia di cicli in un for, ho spostato FUORI dal ciclo la dichiarazione
della
variabile e subito è diventato più veloce...

 
Mah...queste sono ottimizzazioni che fa il compilatore :|
Sei sicuro di non avere compilato in debug mode ?
In ogni caso, è sempre meglio favorire la chiarezza rispetto ad una 
nozione "nebulosa" di efficienza (Donald Knuth docet...)
-- 
                 ''~``
                ( o o )
+---------.oooO--(_)--Oooo.----+
 
http://www.jroller.com/page/megadix/
 
http://www.mict.it/

come sarebbe debug mode?
con visualc++ c'è debug-release mode ma
con java e jbuilder?
(comunque ho usato il profiler della borland, non mi sono affidato
soltanto al tempo "cronometrato"...)
o per "debug mode" intendi che gli faccio stampare qualche
output su System.out?

 variabile e subito è diventato più veloce...
Uhm... la dichiarazione o l'*inizializzazione* ?
Ovvio che se scrivi
MyClass s = new MyClass();
while(..){}
è più veloce di:
while(...)
{
MyClass s = new MyClass();
...
}
... ma solo perché è ripetuta l'inizializzazione, non la dichiarazione, 
che come ha spiegato Cristiano non è rilevante a runtime.
Ciao
pole

Hannibal wrote:

Impossibile:
la Java Virtual machine non ha "coscienza" dello scope delle variabili.
- Dario

oops, scusate...
mi ero in effetti confuso tra inizializzazione e dichiarazione

 }
Io sceglierei questo, per il semplice motivo che la dichiarazione di un 
oggetto implica anche una sua inizializzarione.Percui, se lo inserisci 
all'interno del ciclo, ad ogni passaggio dichiara un nuovo oggetto, con 
un conseguente spreco di risorse.
Non e' quindi vero che i due stili sono identici! E' invece vero, che e' 
consigliato inserire la dichiarazione nello scope piu' vicino al proprio 
utilizzo.
Quindi cosa fare??? Io varei nel modo seguente(spero di non tirarmi 
dietro le ire dei guru del NG):
{
   String a;
   while (condizione) {
     a = "Tutto quello che ti serve fare";
   }
}
Usare un'ulteriore scope, esterno, apposta per la dichiarazione della 
variabile, che chiudi subito dopo.
Ciao,
-- 
Davide Gurgone
http://www.gurgone.it/
davide.gurgone_CHIOCCIOLINA_sweetvillage.it

 }
Non c'é alcuna differenza dal punto di vista dell'efficienza. In tutti e due
i modi la variabile deve essere inizializzata all'inizio del ciclo. Però il
secondo è più corretto se la variabile non serve al di fuori.
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it

 un conseguente spreco di risorse.
Idem come sopra.
Ciao :)
pole
PS: un "IMO" a volte può rendere le affermazioni meno "pericolose" :)