/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Erklæring af variabler i
Fra : Martin Møller Bæk


Dato : 24-07-02 11:47

Hej

Hvis man har en løkke, hvori man vil bruge en
eller anden variabel i hver gennemgang i løkken,
er det så bedst at erklære den inden i løkken (A)
eller lige ovenfor (dvs udenfor) løkken(B)?
Eller er det en smagssag?

Jeg tænker lidt på performance forskelle,
omend der måske ofte ikke er den store forskel.
Under A vil 's' hele tiden blive oprettet, men
tilgengæld er man af med den, når løkken slutter,
hvorimod man hænger på den bagefter i B.


Mvh.
Martin MB.



ex. A:

for(int i=0; i<10; i++)
{
String s = ....
foo(s);
........
}

ex. B:

String s;
for(int i=0; i<10; i++)
{
s = ....
foo(s);
........
}


 
 
Lars Dam (24-07-2002)
Kommentar
Fra : Lars Dam


Dato : 24-07-02 12:14

On Wed, 24 Jul 2002 12:47:27 +0200, Martin Møller Bæk
<martin@nospam.aflame.dk> wrote:

>Jeg tænker lidt på performance forskelle,
>omend der måske ofte ikke er den store forskel.
>Under A vil 's' hele tiden blive oprettet, men
>tilgengæld er man af med den, når løkken slutter,
>hvorimod man hænger på den bagefter i B.
>

Det har ikke den helt store betydning, idet det kun er reference du
snakker om. Det der tæller er om du instantierer, eller fremhenter et
objekt (f.eks. s = new String(), eller s = (String)vector.elementAt(i)
).

Førstnævnte er tung, den anden ikke.

Så istedet for at tænke performance når du definerer dine referencer,
så smid dem så langt inde i dit scope som muligt, da det ikke er dem
der giver udslag på performance, men tilgengæld, får du en bedre
(pænere/forståelig) kode.

>Mvh.
>Martin MB.
>

vh. ld

---
"Time is the fire in which we burn"

Martin Møller Bæk (24-07-2002)
Kommentar
Fra : Martin Møller Bæk


Dato : 24-07-02 19:39



Lars Dam wrote:

> Så istedet for at tænke performance når du definerer dine referencer,
> så smid dem så langt inde i dit scope som muligt, da det ikke er dem
> der giver udslag på performance, men tilgengæld, får du en bedre
> (pænere/forståelig) kode.
>


Ok, tak. Så gør jeg det.

/Martin


Niels Ull Harremoës (26-07-2002)
Kommentar
Fra : Niels Ull Harremoës


Dato : 26-07-02 11:07

Hvis du erklærer variablen inde i løkken vil det muligvis give
oversætteren/JIT-vm'en bedre muligheder for at optimere, da den så evt kan
smide variablen helt væk. Det kræver en (lidt) tungere analyse, hvis
variablen er erklæret uden for løkken - og JIT oversættere bruger sjældent
tid på tunge analyser.

Fx kan oversætteren omskrive

for(int i=0; i<10;i++) {
int x = 10 * i + 4;
doSomething(x);
}

til

for(int i=0; i<10;i++) {
doSomething(10 * i + 4);
}

og måske endda til

for(int i=4; i<104;i+=10) {
doSomething(i);
}

omend denne sidste omformning nok kun foretages af "tunge" oversættere.

Hvis du er rigtig nysgerrig, kan du jo prøve at se på bytecoden for begge
løsninger og finde ud af om der er forskel? Evt benchmarke (med alle de
forbehold, der er i en benchmark). Men performancemæssigt er vi nok langt
nede i detaljerne.

Rent stilmæssigt går jeg også klart ind for at erklære variablen så lokalt
som muligt. Det gør programmet mere læseligt og robust over for rettelser,
da man nu kun behøver "bekymre" sig om x inde i løkken. Så hvis en anden
løkke lidt længere nede også bruger x, behøver udvikleren ikke spekulere
over, om det nu er den sidst beregnede værdi fra den forrige løkke der
bruges osv.

Niels Harremoës

"Martin Møller Bæk" <martin@nospam.aflame.dk> wrote in message
news:3D3EF461.7050702@nospam.aflame.dk...
>
>
> Lars Dam wrote:
>
> > Så istedet for at tænke performance når du definerer dine referencer,
> > så smid dem så langt inde i dit scope som muligt, da det ikke er dem
> > der giver udslag på performance, men tilgengæld, får du en bedre
> > (pænere/forståelig) kode.
> >
>
>
> Ok, tak. Så gør jeg det.
>
> /Martin
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste