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

+=, -=, *=, /=, ++, -- คืออะไรเอ่ย


ปกติแล้วเมื่อเราประกาศตัวแปร 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;
นอกจากนี้ เวลาเราเขียนโปรแกรมจริงๆ มักจะพบว่าจะมีการเพิ่มค่าให้กับตัวแปรหรือลดค่าให้กับตัวแปรครั้งละ 1 อยู่บ่อยๆ จึงเป็นที่มาของเครื่องหมายพิเศษอีก 2 ตัวดังนี้ครับ
  • -- โดย x--; จะเทียบเท่า x -= 1; หรือก็คือ x = x - 1;
  • ++ โดย x++; จะเทียบเท่า x += 1; หรือก็คือ x = x + 1;
ทีนี้เราลองเขียนโปรแกรมแรกของ Post นี้กันดูใหม่โดยใช้รูปแบบสั้นกันนะครับ จะได้เป็น

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 เท่านั้นครับผม

หวังว่าจะรู้จักและเข้าใจ +=, -=, *=, /=, ++, -- กันแล้วนะครับ

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

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

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...