[ gojic @ 12.05.2016. 12:03 ] @
Imam jedno teorijsko pitanje koja je u stvari razlika izmedju "post increment n++" i "pre increment ++n".

Znam sta znace i sta rade, al mi nije jasno zasto to rade.

npr:
x = 0;
y = broj[x++]; znam da dobijam nulu

x = 0;
y = broj[++x]; znam da dobijam 1

zasto u prvom slucaju vraca originalnu vrednost a u drugom dodaje za jedan kao sto bi i trebalo?

i druga stvar,mozda glupo pitanje,al zasto ne bih koristio

var x = 0;
x++;
document.write(num); dobijam 1

Nekako mi logicnije da radim ovako.

Da li ima neke prakticne razlike izmedju ova dva nacina,mozda je ovaj prvi nacin uredniji ili je svejedno, i zavisi iskljucivo od onogo koji kodira i njegove licne navike ili zelje?

Hvala

[Ovu poruku je menjao gojic dana 12.05.2016. u 13:28 GMT+1]
[ djoka_l @ 12.05.2016. 12:22 ] @
Code:

x=0;
y=x++;


rezlutat je y=0 i x=1

Code:

x=0;
y=++x;


rezultat je y=1 i x=1

Znači razlika je da li se na x dodaje 1 PRE ILI POSLE doeljivanja vrednosti iksa ipsilonu.

To je isto kao da pitaš, u čemu je razlika između sledeća dva koda

Code:

x=0;
y=x
x=x+1;


i

Code:

x=0;
x=x+1;
y=x;


Razlika je u redosledu operacija...
[ Shadowed @ 12.05.2016. 12:54 ] @
Ili, ako ce ti tako biti lakse, mozes posmatrati operator ++ kao funckiju sa potpisom (pseudo kod)
int ++(ref int x)

(ovde namerno ne koristim JS nacin pisanja funkcije posto je u JS-u to manje striktno).
Dakle, funkcija, prima broj, i vraca broj.

U slucaju da koristis:
y=x++;

to je kao da je u pitanju funkcija:
Code:

int ++(ref int x)
{
    x = x + 1;
    return x;
}


u slucaju:
y = ++x;

to je kao da je funkcija:
Code:
int ++(ref int x)
{
    x = x + 1;
    return x - 1;
}
[ jablan @ 12.05.2016. 12:59 ] @
Sve u svemu, jedno veliko sr*nje koje se bez ikakvog razloga kopira iz jezika u jezik.
[ negyxo @ 12.05.2016. 13:06 ] @
^U jeee pa kakav si ti to haxor, ocigledno ne znas da napises program u jednoj liniji :D
[ djoka_l @ 12.05.2016. 13:23 ] @
Uzgred, zašto postoje post i preincrement operacije.
Razlog je vrlo jednostavan - prvi Unix, kao C programski jezik nastali su na PDP-11 računarima. Ta arhitektura je imala vrlo dobro urađen ortogonalan set instrukcija i među adresnim modovima postojali su postincrement i predecrement modovi,

Na primer, ako je arr neki niz, tada je bilo jednostavno da se iskompajlira:

x=arr[i++]

ili

x=arr[--j]

Zbog "simetrije" jezika dodati su i operatori preincrement i postdecrement.

Jednostavno, C je napravljen da zameni asembler, a pisci su želeli da generisanje mašinskog koda bude jednostavno.

Svi ostali jezici nastali kao derivati C, nasledili su i ove operatore, što iz nekakvog automatizma, što iz želje da programerima olakša tranziciju sa jednog na drugi jezik.
[ VladaSu @ 12.05.2016. 18:23 ] @
x = 1;
y = 2;

z = x + y++; // u ovom slucaju z ce biti 3 i y 3
z = x + ++y // u ovom slucaju z ce biti 4 i y 3

Da li ima smisla? Ima.
Da li moze bez ovoga? Moze kao i sto moze bez 90% naredbi.