เรื่องของ ++i กับ i++
การเขียนโปรแกรม หลายๆภาษาย่อมให้มีการเขียน i++ แทน i = i + 1 ซึ่งผมก็เคยได้ยินมาว่า การเขียน i++ และ ++i นั้นให้ค่าที่แตกต่างกัน คือ i++ จะนำค่าไปใช้ก่อนค่อยบวก ส่วน ++i จะบวกก่อนค่อยนำค่าไปใช้ พูดๆไปก็งงอยู่เหมือนกัน ลองดูตัวอย่างนี้ครับ
ถ้าเข้าใจแล้วว่า i++ และ ++i ทำงานต่างกันอย่างไร
ผมก็จะพูดถึงกรณีของ for loop นะครับ เคยได้ยินไหมว่าเวลาใช้ loop ไม่ควรใส่การทำงานอะไรเยอะแยะภายใน เช่น chaining method เพราะนอกจากจะทำให้มีโอกาสเกิด null แล้วยังต้อง access method ทุกๆ รอบอีกต่างหาก
ตัวอย่างชุดนี้มีอะไรแปลกไหม การทำงานเหมือนกันแน่ๆ จะนำค่าไปใช้ก่อนค่อยบวก(i++) หรือบวกก่อนค่อยนำค่าไปใช้(++i) มันก็วนรอบเท่ากันอยู่ดี แล้วยังไง ดูความแตกต่างของสองอย่างนี้กัน (copy มาอีกทีจาก link ด้านล่าง)
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
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
- 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