วันอาทิตย์ที่ 4 กันยายน พ.ศ. 2559

รู้แล้วว่าโปรแกรมรันจากบนลงล่าง แล้วถ้าบรรทัดเดียวกันหละ รันยังไง


แน่นอนเรารู้แล้วว่าโปรแกรมรันจากบนลงล่าง แต่ถ้าอยู่ในบรรทัดเดียวกันหละ มันรันยังไงกันแน่

ในเรื่องนี้มันแบ่งได้เป็นหลายเคสครับ เช่น สมมติเป็นการ 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

อันนี้ก็เป็นเคสเฉพาะของ ++ และ -- ครับ

เรื่องราวมันไม่จบแค่นั้นครับ มันยังมีเคสเฉพาะของเครื่องหมายด้านการคำนวณทางด้านคณิตศาสตร์ด้วย เครื่องหมายดังกล่าวได้แก่
  • + บวก
  • - ลบ
  • * คูณ
  • / หาร
ตามธรรมชาติของ ActionScript 3.0 การคำนวณจะคิดจากซ้ายไปขวาครับ แต่จะให้น้ำหนักของ คูณ กับ หาร สำคัญกว่า บวก กับ ลบ ครับ หมายความว่าถ้ามี คูณ หรือ หาร ก็จะทำก่อนนั่นเองครับ ตรงนี้คงต้องดูตัวอย่างหลายๆ แบบ แล้วจะเข้าใจอย่างถ่องแท้เองครับ 

ตัวอย่างที่ 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 ได้ตลอดนะครับ!!

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...