เรื่องของ ++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 คืออะไรกันนะ???

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

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

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

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

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

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

Port Forwarding สำหรับคนใช้ AIS Fibre

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

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง