ปกติแล้วเมื่อเราประกาศตัวแปร Type ที่เป็นตัวเลขมา เราก็มักจะมีการเปลี่ยนแปลงค่าของตัวแปรนั้นอยู่บ้าง โดยการคำนวณร่วมกับค่าเดิมที่ตัวแปรนั้นเก็บอยู่ เช่น
var x:Number = 10;
x = x - 1;
x = x + 15;
x = x + 1;
x = x - 7;
trace(x);
โปรแกรมนี้ก็จะมี Output ดังรูปด้านล่าง
ภาษาที่ใช้เขียนโปรแกรมส่วนใหญ่เค้าเลยออกแบบ Syntax พิเศษมาไว้เผื่อสำหรับกรณีเช่นนี้ ให้โปรแกรมเมอร์สามารถเขียนได้สั้นลงครับ โดยจะมีเครื่องหมายดังนี้ครับ
- -= โดย x -= 10; จะเทียบเท่า x = x - 10;
- += โดย x += 10; จะเทียบเท่า x = x + 10;
- *= โดย x *= 10; จะเทียบเท่า x = x * 10;
- /= โดย x /= 10; จะเทียบเท่า x = x / 10;
- -- โดย x--; จะเทียบเท่า x -= 1; หรือก็คือ x = x - 1;
- ++ โดย x++; จะเทียบเท่า x += 1; หรือก็คือ x = x + 1;
var x:Number = 10;
x--;
x += 15;
x++;
x -= 7;
trace(x);
โปรแกรมนี้เหมือนเดิมทุกประการเพราะฉะนั้น Output ก็ควรจะเหมือนกันจริงมั้ยครับ ดูรูปครับ
พอ เขียนเป็นรูปแบบสั้นๆ แบบนี้แล้วก็เริ่มรู้สึกว่าจริงๆ เขียนโปรแกรมมันก็ไม่ได้ยากอะไรใช่มั้ยครับ อิอิ ผมคิดว่าใครก็ตามที่เล่นเกมได้ก็เขียนโปรแกรมได้ก็แค่นั้นเองครับ
ลองดูตัวอย่างต่อไปนี้ครับ
var money:Number = 100;
var shoeCost:Number = 8;
var numShoes:Number = 4;
money -= shoeCost * numShoes;
trace("I have " + money + " baht.");
var salary:Number = 20;
money += salary;
trace("Now, I have " + money + " baht.");
จะเห็นว่าคล้ายๆ ของเดิมจาก Post ที่แล้ว แต่ว่ามีเพิ่มตัวแปร numShoes ที่บอกจำนวนคู่ที่ซื้อเพิ่มมาครับ ตัวอย่างนี้อยากจะให้สังเกตุตรงบรรทัด
money -= shoeCost * numShoes;
บรรทัดนี้โปรแกรมจะคำนวณ 8 คูณกับ 4 ก่อนได้เท่าไหร่แล้วค่อยนำไปลบออกจาก money ครับ จะไม่ใช่เอา 8 ไปลบออกจาก money ก่อนแล้วเหลือเท่าไหร่เอาไปคูณ 4 นะครับ Output ที่ได้ตามรูปด้านล่างเลยครับ
กลับมาที่เจ้า -- กับ ++ หน่อยนึงนะครับ เจ้าเครื่องหมายทั้ง 2 ตัวนี้มันมีอะไรพิเศษอยู่นิดหน่อยครับ นั่นก็คือเราสามารถเขียนเครื่องหมายนี้ได้ที่ข้างหลังตัวแปรหรือจะข้างหน้าก็ได้ครับ
var x:Number = 10;
x++;
++x;
trace(x);
x--;
--x;
trace(x);
ได้ Output เป็น
คง ยังไม่แปลกใจอะไรกันใช่มั้ยครับ ไม่ว่าจะอยู่หน้าหรือหลัง -- มันก็ยังลบออก 1 เหมือนเดิม ส่วน ++ มันก็ยังบวกเพิ่ม 1 เหมือนเดิม ลองดูตัวอย่างถัดไปครับ
var x:Number = 20;
var y:Number = 1;
x += y++;
trace("x: " + x);
trace("y: " + y);
x += 5 + y++;
trace("x: " + x);
trace("y: " + y);
ได้ Output เป็น
Output
x: 21
y: 2
x: 28
y: 3
ลองดูเทียบกับโปรแกรมนี้ครับ ทุกอย่างเหมือนเดิมหมดยกเว้นเปลี่ยนที่จากเครื่องหมาย ++ อยู่ข้างหลัง y มาอยู่ข้างหน้าแทนครับ 2 จุด
var x:Number = 20;
var y:Number = 1;
x += ++y;
trace("x: " + x);
trace("y: " + y);
x += 5 + ++y;
trace("x: " + x);
trace("y: " + y);
ได้ Output เป็น
Output
x: 22
y: 2
x: 30
y: 3
ความแตกต่างของการวาง -- หรือ ++ ไว้ข้างหน้ากับไว้ข้างหลัง คือ หากไว้ข้างหน้าตัวแปรนั้นจะถูกเพิ่มค่าหรือลดค่าก่อนที่จะนำไปคำนวณต่อไป ครับ แต่ถ้าหากไว้ข้างหลังตัวแปรนั้นจะถูกเอาไปคำนวณก่อนและค่อยเพิ่มค่าหรือลด ค่าหลังจากที่ทำบรรทัดนั้นเสร็จแล้วครับ
โปรแกรมแรกเอาเครื่องหมาย ++ ไว้ข้างหลัง จะมีค่าเทียบเท่าการเขียนแบบนี้ครับ
var x:Number = 20;
var y:Number = 1;
x += y++;
trace("x: " + x);
trace("y: " + y);
x += 5 + y++;
trace("x: " + x);
trace("y: " + y);
เทียบเท่า
var x:Number = 20;
var y:Number = 1;
x += y;
y += 1;
trace("x: " + x);
trace("y: " + y);
x += 5 + y;
y += 1;
trace("x: " + x);
trace("y: " + y);
โปรแกรมที่สองเอาเครื่องหมาย ++ ไว้ข้างหน้า
var x:Number = 20;
var y:Number = 1;
x += ++y;
trace("x: " + x);
trace("y: " + y);
x += 5 + ++y;
trace("x: " + x);
trace("y: " + y);
เทียบเท่า
var x:Number = 20;
var y:Number = 1;
y += 1;
x += y;
trace("x: " + x);
trace("y: " + y);
y += 1;
x += 5 + y;
trace("x: " + x);
trace("y: " + y);
ส่วน -- ก็จะเหมือนกันกับ ++ ครับ ในเรื่องการไว้ข้างหน้าหรือข้างหลัง แต่เปลี่ยนจากบวก 1 เป็นลบ 1 เท่านั้นครับผม
หวังว่าจะรู้จักและเข้าใจ +=, -=, *=, /=, ++, -- กันแล้วนะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น