เรื่องของ ++i กับ i++

การเขียนโปรแกรม หลายๆภาษาย่อมให้มีการเขียน i++ แทน i = i + 1 ซึ่งผมก็เคยได้ยินมาว่า การเขียน i++ และ ++i นั้นให้ค่าที่แตกต่างกัน คือ i++ จะนำค่าไปใช้ก่อนค่อยบวก ส่วน ++i จะบวกก่อนค่อยนำค่าไปใช้ พูดๆไปก็งงอยู่เหมือนกัน ลองดูตัวอย่างนี้ครับ

i=1;
j=i++; // i=2, j=1
i=1;
j=++i; // i=2, j=2

ถ้าเข้าใจแล้วว่า i++ และ ++i ทำงานต่างกันอย่างไร

ผมก็จะพูดถึงกรณีของ for loop นะครับ เคยได้ยินไหมว่าเวลาใช้ loop ไม่ควรใส่การทำงานอะไรเยอะแยะภายใน เช่น chaining method เพราะนอกจากจะทำให้มีโอกาสเกิด null แล้วยังต้อง access method ทุกๆ รอบอีกต่างหาก

for(i=0;i<n;i++) 
for(i=0;i<n;++i) 

ตัวอย่างชุดนี้มีอะไรแปลกไหม การทำงานเหมือนกันแน่ๆ จะนำค่าไปใช้ก่อนค่อยบวก(i++) หรือบวกก่อนค่อยนำค่าไปใช้(++i) มันก็วนรอบเท่ากันอยู่ดี แล้วยังไง ดูความแตกต่างของสองอย่างนี้กัน (copy มาอีกทีจาก link ด้านล่าง)

i++ :
  • create a temporary copy of i
  • increment i
  • return the temporary copy
++i :
  • increment i
  • return i
แต่มันก็ไม่ใช่เรื่องใหญ่อะไร รู้ไว้ขำๆ ก็พอนะคร้าบบ

ที่มา :
http://en.wikipedia.org/wiki/Opcode
http://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i
http://stackoverflow.com/questions/561588/what-is-more-efficient-i-or-i

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)