x++, ++x, x+=1 eller x=x+1?
x++ , ++x , x+=1 och
x=x+1 , alla är olika sätt att öka värdet på
variabeln x med ett. Det kan verka märkligt att det
finns så många sätt att öka en variabels värde. Behövs verkligen
alla och är det egentligen någon skillnad på dem?
Svaret är helt klart ja. Det finns en tydlig skillnad mellan
operatorerna och dess tänkta användningsområden och det finns en
motivering till att de alla behövs.
En "normal" addition har formen a+b . När man beräknar
ett uttryck vill man normalt använda resultatet
på något sätt också. Till exempel så sparar man det i en variabel:
x=a+5 . Denna sats kommer först att hämta värdet ur
a , till detta adderas 5 och sedan sparas resultatet i
x . I många imperativa programmeringsspråk kan man även
spara resultatet i variabler som ingår i beräkningen.
x=x+1 är alltså bara ett specialfall av den klassiska
additionen.
Det där med att ändra på en variabels värde är något man gör
väldigt ofta när man programmerar. Det ligger i de imperativa
programmeringsspråkens natur att göra sådant. Detta har gjort att
man lagt till en operator, += , för att underlätta
just sådan kod. Istället för att skriva x=x+a kan man
skriva x+=a . När man vet vad det betyder så blir
koden mer överskådlig om man använder += istället för
att skriva det längre alternativet. Det är fritt att välja mellan
x+=a och x=x+a då de är identiska i alla
avseenden. Utöver += finns även övriga räknesätt
representerade med: -= , *= ,
/= , &= och |= .
Inte nog med att det är mycket vanligt att man beräknar ett nytt
värde på en redan existerande variabel, det nya värdet är nästan
alltid exakt ett större eller ett mindre än det gamla värdet. Det
vill säga, den vanligaste beräkningen är x=x+1 . Så
är det eftersom denna beräkning förekommer i många loopar och på
andra ställen där man stegar igenom något data ett steg i
taget. Eftersom detta är en såpass vanlig beräkning vill man göra
koden lite tydligare och skilja mellan den vanliga additionen med
ett och det faktum att man ökar ett index eller en räknare ett steg.
Detta gör man genom att använda ++ .
++ skrivs antingen före eller efter den variabel man
vill öka värdet på. Valet om det ska stå före eller efter är inte
alltid uppenbart. Om satsen x++ står för sig självt
har det ingen betydelse om ++ står före eller efter
x . Däremot om satsen är en del av något större
uttryck är det viktigt att tänka på i vilken ordning man vill att
saker ska ske. Skriver man ++ före x så
kommer värdet på x att ökas innan x
används i det kringliggande uttrycket. Om ++ skrivs
efter x sker uppräkningen efter användningen.
|
x = 5; y = x++; | y tilldelas värdet 5, x ökas sedan till 6. |
x = 5; y = ++x; | x ökas till 6, y tilldelas därefter värdet 6. |
x = 5; y = ++x--; | x ökas till 6, y tilldelas värdet 6 och x minskas sedan till 5 igen. |
x = 5; y = (x + 1)++; | Fel! |
Som vi ser i exemplet ovan så finns även operationen
-- som minskar värdet med ett. Den används på samma
sätt som ++ . Det sista exemplet blir fel eftersom man
endast kan använda ++ på variabler. x+1
är ett uttryck och evaluerar i exemplet till 6 och det går inte
att öka värdet på siffran 6. Det skulle vara samma sak som att
skriva 6=6+1 vilket inte är tillåtet i de flesta
programmeringsspråk.
Sammanfatningsvis kan man väl säga (notera att detta är min högst
personliga åsikt) att den normala additionen behövs eftersom man
vill kunna skriva saker som x=a+b , +=
behövs eftsersom x+=35 är ett tydligare sätt att
skriva x=x+35 , och ++ behövs för att
särskilja addition med ett från uppräkningen av ett index. För
kodexempel som visar de olika sätten att addera rekomenderar jag
en titt på källkodsexemplen på denna sida.
Beräkningar och uppräkningar av index förekommer i de flesta programmen där.
Tillbaka till indexet |