[Java lista] for: ++i vagy i++

Marai Laszlo lists at atleta.hu
2009. Feb. 9., H, 11:53:18 CET


On Mon, 9 Feb 2009 10:41:02 +0000
biziclop <biziclop at gmail.com> wrote:

  Hali!


> 2009/2/9 Andras Suller <suller.andras at gmail.com>:
> >> void t1(int n){
> >>        for (int i=0; i<n; i++){
> >>            muvelet(i);
> >>        }
> >>    }
> >> void t2(int n){
> >>        for (int i=n; i>0; i--){
> >>            muvelet(i);
> >>        }
> >> }
> > Mivel a muvelet felhasználja az i értékét, így a két megoldás
> > szerintem nem ekvivalens. Optimalizáláskor nem biztos, hogy az egyiket
> > a másikba át lehet alakítani, ez feladatfüggő. Már csak azért is, mert
> > az i értékkészlete a két függvény esetén nem ugyanaz :)
> Szerintem viszonylag jogosan elvarhato, hogy ha a ket kod pontosan
> ugyanazt csinalja, akkor ugyanaz legyen a bytecode-ja is. (Tekintve
> hogy rendkivul egyszeru esetrol van szo.)

De nem ugyanazt csinalja: az egyik felfele a masik lefele szamol. Ha a
muvelet(i) hivasnak van mellekhatasa, akkor nem azonos a ket ciklus. (Ha
nncs mellekhatasa, akkor pedig az egeszet ki lehet optimalizalni es
vegtelenul gyors lesz ;) ). Szerintem arra vonatkozott a komment, hogy ha
valoban at akarnad alaktani a kodot az egyk formabol a masikba, akkor
ugyis (forras szinten) plusz muvelet kell - egy kvonas - azzal meg ugyis
bukik az egesz 'optimalizalas'. Nem mintha merheto kulonbseg lenne :).

  atleta


További információk a(z) Javalist levelezőlistáról