Är ++ inte samma sak som +1 (javascript)

Permalänk
Medlem

Är ++ inte samma sak som +1 (javascript)

Hej!

Som topic lyder.

Alltid trott att variabel ++ är samma sak som variabel +1.

Vad är skillnaden mellan ++ och +1, eller finns det någon?

Visa signatur

Gaemer Addicted!

Permalänk
Medlem

++ är samma som +=1.

Visa signatur

Still play with birds like I hang with mother goose.

Permalänk
Medlem

Om det funkar likadant som i C (vilket jag tror det gör) så innebär x++ att utrycket returnerar värdet av x och därefter ökar x med 1.
++x däremot ökar först x med 1, och returnerar det nya värdet.


x=4;
y=x++;

Skulle ge y=4 och x=5 medan
x=4;
y=++x;
skulle ge x=y=5;

x=4;
y=x+1;
skulle däremot ge
x=4 och y=5, dvs x ändras inte vilket det gör när du använder ++ operatorn.

Permalänk
Medlem

variabel++ ökar värdet på variabeln med 1, medan variabel+1 adderar variabel och 1 utan att ändra värdet på variabel. Se t.ex. denna referens.

Permalänk
99:e percentilen

De är inte ekvivalenta. Så här fungerar det:

foo++;

brukar man använda som en shorthand för

foo = foo + 1;

Men värdet av foo++ är inte detsamma som värdet av foo = foo + 1:

> let foo = 5; undefined > foo++ 5 > foo 6

Notera skillnaden:

> let foo = 5; undefined > foo = foo + 1 6 > foo 6

  • Värdet av foo++ är "det värde foo hade innan inkrementeringen".

  • Värdet av ++foo är "det värde foo har efter inkrementeringen".

  • Värdet av foo = foo + 1 är "det värde foo har efter inkrementeringen".

Alla tre uttryck har sidoeffekten att foo inkrementeras.

(Sedan har du förstås också värdet av foo + 1, vilket bara är "1 större än foo", precis som det låter.)

Exempel

Det kan bli väldigt fel om man inte är uppmärksam.

let foo = 0; let acc = 0; while (foo++ < 10) { acc += foo; } console.log(acc);

Resultat:

55

Notera skillnaden:

let foo = 0; let acc = 0; while (++foo < 10) { acc += foo; } console.log(acc);

Resultat:

45

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Datavetare

@Alling: exakt.

Värt att nämna är att både foo++ och ++foo båda är exempel på satser då de faktiskt utför en sidoeffekt, i detta fall ökar värde på foo med ett.

Däremot är foo + 1 ett uttryck då de endast beräknar ett värde men inget tillstånd förändras.

Alltid bra att hålla isär dessa två begrepp när man resonerar kring kod, lite kursmateria som bl.a. tar upp satser och uttryck.

Edit: tog bort referensen till KTH. Fick en google-träff på en KTH sidan, men själva dokumentet kommer ju från Linköpings universitet. Nog för att jag är gammal KTH-student, men rätt ska vara rätt

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
99:e percentilen
Skrivet av Yoshman:

@Alling: exakt.

Värt att nämna är att både foo++ och ++foo båda är exempel på satser då de faktiskt utför en sidoeffekt, i detta fall ökar värde på foo med ett.

Däremot är foo + 1 ett uttryck då de endast beräknar ett värde men inget tillstånd förändras.

Alltid bra att hålla isär dessa två begrepp när man resonerar kring kod, lite kursmateria från KTH som bl.a. tar upp satser och uttryck.

Jättebra poäng! Tyvärr, kanske man ska säga, används ju ofta satser (med sidoeffekter) medvetet som uttryck i JavaScript, till exempel i konstruktioner som while (i-- > 0) { ... }.

I många fall är deklarativ kod med hög referentiell transparens att sträva efter. Tyvärr läggs det i mina ögon för lite vikt på det inom relevanta utbildningar.

Visa signatur

Skrivet med hjälp av Better SweClockers