แน่นอนเรารู้แล้วว่าโปรแกรมรันจากบนลงล่าง แต่ถ้าอยู่ในบรรทัดเดียวกันหละ มันรันยังไงกันแน่
ในเรื่องนี้มันแบ่งได้เป็นหลายเคสครับ เช่น สมมติเป็นการ Assign ค่า หรือก็คือ Statement ที่มีเครื่องหมายเท่ากับ (=) โปรแกรมก็จะคำนวณคำสั่งด้านขวามือของเครื่องหมายเท่ากับก่อน แล้วเอาผลลัพธ์ที่ได้มา Assign ให้กับตัวแปรทางด้านซ้ายมือของเครื่องหมายเท่ากับ
และก่อนหน้านี้เราได้รู้จัก ++ และ -- ไปแล้ว และก็รู้ว่าการเขียนให้ ++ และ -- อยู่ข้างหน้าหรืออยู่ข้างหลังตัวแปรนั้น ผลที่ได้มันต่างกัน ถ้าอยู่ข้างหน้ามันจะเพิ่มค่า/ลดค่าให้กับตัวแปรก่อน ถ้าอยู่ข้างหลังมันจะเพิ่มค่า/ลดค่าให้กับตัวแปรทีหลัง ถึงแม้ว่าในบรรทัดจะมีเครื่องหมายเท่ากับแต่ถ้า ++ หรือ -- อยู่ข้างหลังตัวแปร เจ้าตัวแปรตัวนั้นก็จะถูกเพิ่มค่า/ลดค่าหลังจากที่โปรแกรมทำการ Assign ค่าให้กับตัวแปรทางซ้ายมือของเครื่องหมายเท่ากับซะงั้น
var x:Number = 10;
var y:Number = x++;
trace(y);
trace(x);
Output ที่ได้จะเป็น
10
11
แต่ถ้า ++ ดันมาอยู่ข้างหน้า x
var x:Number = 10;
var y:Number = ++x;
trace(y);
trace(x);
Output ที่ได้จะเป็น
11
11
อันนี้ก็เป็นเคสเฉพาะของ ++ และ -- ครับ
เรื่องราวมันไม่จบแค่นั้นครับ มันยังมีเคสเฉพาะของเครื่องหมายด้านการคำนวณทางด้านคณิตศาสตร์ด้วย เครื่องหมายดังกล่าวได้แก่
- + บวก
- - ลบ
- * คูณ
- / หาร
ตัวอย่างที่ 1
trace(10 + 5);
trace(10 + 5 - 2);
trace(10 + 5 * 2);
trace(10 + 10 / 2);
Output
Recap
10 + 5 >>>>> 15
10 + 5 - 2 >>>>> 15 - 2 >>>>> 13
10 + 5 * 2 >>>>> 10 + 10 >>>>> 20
10 + 10 / 2 >>>>> 10 + 5 >>>>> 15
ตัวอย่างที่ 2
trace(10 + 5 - 2 * 4);
trace(10 + 5 * 2 * 2);
trace(10 + 10 / 2 - 5);
trace(10 / 2 + 5 * 3);
Output
Recap
10 + 5 - 2 * 4 >>>>> 10 + 5 - 8 >>>>> 15 - 8 >>>>> 7
10 + 5 * 2 * 2 >>>>> 10 + 10 * 2 >>>>> 10 + 20 >>>>> 30
10 + 10 / 2 - 5 >>>>> 10 + 5 - 5 >>>>> 15 - 5 >>>>> 10
10 / 2 + 5 * 3 >>>>> 5 + 5 * 3 >>>>> 5 + 15 >>>>> 20
ตัวอย่างที่ 3
trace(10 + 2 * 3 / 3 - 10 / 2 * 5);
trace(20 * 2 / 4 * 3 - 15 + 2 * 3);
Output
Recap
10 + 2 * 3 / 3 - 10 / 2 * 5 >>>>> 10 + 6 / 3 - 10 / 2 * 5 >>>>> 10 + 2 - 10 / 2 * 5 >>>>> 10 + 2 - 5 * 5 >>>>> 10 + 2 - 25 >>>>> 12 - 25 >>>>> -13
20 * 2 / 4 * 3 - 15 + 2 * 3 >>>>> 40 / 4 * 3 - 15 + 2 * 3 >>>>> 10 * 3 - 15 + 2 * 3 >>>>> 30 - 15 + 2 * 3 >>>>> 30 - 15 + 6 >>>>> 15 + 6 >>>>> 21
ดูกันไป 3 ตัวอย่างพร้อมขั้นตอนที่โปรแกรมมันคิด น่าจะเข้าใจกันแล้วนะครับ
แล้วแบบนี้ถ้าเราอยากให้มันบวกก่อนค่อยคูณหละ ทำได้มั้ย
ได้ครับ! เราสามารถกำหนดว่าจะให้โปรแกมทำอะไรก่อนหลังได้โดยการใช้วงเล็บมาช่วยครับ เช่น
ตัวอย่างที่ 4
trace((10 + 5) * 3);
trace(10 * (5 - 3) / 4);
Output
Recap
(10 + 5) * 3 >>>>> 15 * 3 >>>>> 45
10 * (5 - 3) / 4 >>>>> 10 * 2 / 4 >>>>> 20 / 4 >>>>> 5
ก่อนจะจบ Post นี้ลองมาดูอะไรเล่นๆ กันหน่อยครับ
ตัวอย่างที่ 5
var s1:String = "Money = " + 30 + 10;
var s2:String = "Dept = " + 10 * 5;
trace(s1);
trace(s2);
ลองเดากันดูครับว่าจะออกอะไร แล้วดูคำตอบครับว่าตรงอย่างที่คิดมั้ย
Output
อย่าลืมนะครับ หากยังไม่เข้าใจอย่าลืมถามพี่ Compiler ใน Flash Builder ได้ตลอดนะครับ!!
ไม่มีความคิดเห็น:
แสดงความคิดเห็น