Assignment Operator (ตัวดำเนินการกำหนดค่า) คือเครื่องหมายที่ใช้สำหรับกำหนดค่าให้กับตัวแปร หรืออัปเดตค่าของตัวแปรที่มีอยู่แล้ว ในภาษา C# โดยทั่วไปจะใช้สัญลักษณ์ = ซึ่งอ่านว่า “เท่ากับ” แต่ในทางคณิตศาสตร์ของการเขียนโปรแกรมจะหมายถึง “นำค่าทางขวามือไปเก็บไว้ทางซ้ายมือ”
ตัวดำเนินการประเภทนี้เป็นพื้นฐานสำคัญของทุกโปรแกรม เพราะใช้ในการเก็บค่าข้อมูล คำนวณผลลัพธ์ หรืออัปเดตสถานะของตัวแปรให้เป็นข้อมูลใหม่ระหว่างการทำงานของโปรแกรม
Assignment Operator พื้นฐาน
ตัวดำเนินการพื้นฐานที่สุดคือ = ซึ่งหมายถึง “นำค่าทางขวามือไปเก็บในตัวแปรทางซ้ายมือ” โดยไม่เกี่ยวข้องกับการเปรียบเทียบค่าเหมือน == (เท่ากับทางตรรกะ)
namespace MyConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
int number = 10;
string name = "สมชาย";
double price = 19.99;
Console.WriteLine(number);
Console.WriteLine(name);
Console.WriteLine(price);
}
}
}int number = 10;→ สร้างตัวแปรชนิดintชื่อnumberและกำหนดค่าเริ่มต้นเป็น 10string name = "สมชาย";→ กำหนดค่าข้อความให้กับตัวแปรnamedouble price = 19.99;→ กำหนดค่าทศนิยมให้กับตัวแปรpriceConsole.WriteLine(...)→ แสดงค่าที่ถูกกำหนดไว้
ในภาษา C# ต้องกำหนดค่าที่มีชนิดข้อมูลตรงกับตัวแปรที่ประกาศไว้ เช่น int ต้องเก็บจำนวนเต็มเท่านั้น
Assignment Operator แบบย่อ (Compound Assignment Operators)
ภาษา C# มี “รูปแบบย่อ” ของการกำหนดค่า ซึ่งรวมการ “คำนวณ” เข้ากับการ “เก็บค่า” ในบรรทัดเดียว เรียกว่า Compound Assignment Operators เช่น +=, -=, *=, /=, และ %=
รูปแบบทั่วไปคือ
x op= y; // เท่ากับ x = x op y;โดย op คือเครื่องหมายของตัวดำเนินการทางคณิตศาสตร์ เช่น +, -, *, /, %
ตัวอย่าง Assignment Operator แบบย่อ
| ตัวดำเนินการ | ตัวอย่าง | คำอธิบาย | ผลลัพธ์เมื่อ x=10, y=5 |
|---|---|---|---|
= | x = y | กำหนดค่า y ให้กับ x | 5 |
+= | x += y | บวก y เข้ากับ x | 15 |
-= | x -= y | ลบ y ออกจาก x | 5 |
*= | x *= y | คูณ x ด้วย y | 50 |
/= | x /= y | หาร x ด้วย y | 2 |
%= | x %= y | หาค่าเศษของ x ÷ y | 0 |
int x = 10;
int y = 3;
x += y; // เท่ากับ x = x + y;
Console.WriteLine($"ค่าของ x หลังจาก x += y คือ {x}");
x *= 2; // เท่ากับ x = x * 2;
Console.WriteLine($"ค่าของ x หลังจาก x *= 2 คือ {x}");
x -= 5; // เท่ากับ x = x - 5;
Console.WriteLine($"ค่าของ x หลังจาก x -= 5 คือ {x}");- เริ่มต้น
x = 10,y = 3 x += y;→ บวกค่าyเข้ากับxได้13x *= 2;→ คูณxด้วย 2 ได้26x -= 5;→ ลบออก 5 เหลือ21
การใช้ Assignment Operator กับชนิดข้อมูลอื่น
Assignment Operator ไม่จำกัดเฉพาะตัวเลข แต่ยังสามารถใช้กับชนิดข้อมูลอื่น เช่น string หรือ boolean ได้ด้วย
ตัวอย่างการใช้กับข้อความ
string message = "Hello";
message += " World!";
Console.WriteLine(message);- เริ่มจากข้อความ
"Hello" - ใช้
+=เพื่อเชื่อมข้อความ" World!" - ผลลัพธ์คือ
"Hello World!"
ตัวอย่างการใช้กับ Boolean
bool isActive = false;
isActive = !isActive; // กลับค่าจาก false → true
Console.WriteLine(isActive);- ใช้
=เพื่อกำหนดค่าเริ่มต้นเป็นfalse - ใช้
!(NOT operator) ร่วมกับ=เพื่อกลับค่าความจริง - ผลลัพธ์สุดท้ายคือ
true
Assignment Operator แบบซ้อน
เราสามารถกำหนดค่าหลายตัวในบรรทัดเดียวได้ เช่น
int a, b, c;
a = b = c = 100;
Console.WriteLine($"{a}, {b}, {c}");a = b = c = 100;หมายถึงนำค่า100ไปเก็บในcก่อน แล้วนำค่าของcไปเก็บในbและa- ผลลัพธ์คือทั้งสามตัวแปรมีค่าเท่ากันคือ
100
ตาราง Assignment Operators ใน C#
| ตัวดำเนินการ | ชื่อ (Operator Name) | คำอธิบายการทำงาน | ตัวอย่าง | ผลลัพธ์เมื่อ x = 10, y = 5 |
|---|---|---|---|---|
= | Simple Assignment | นำค่าทางขวามือไปเก็บในตัวแปรทางซ้ายมือ | x = y | x = 5 |
+= | Add and Assign | บวกค่าทางขวามือเข้ากับค่าปัจจุบันของตัวแปร | x += y → x = x + y | 15 |
-= | Subtract and Assign | ลบค่าทางขวามือออกจากค่าปัจจุบัน | x -= y → x = x - y | 5 |
*= | Multiply and Assign | คูณค่าปัจจุบันด้วยค่าทางขวามือ | x *= y → x = x * y | 50 |
/= | Divide and Assign | หารค่าปัจจุบันด้วยค่าทางขวามือ | x /= y → x = x / y | 2 |
%= | Modulus and Assign | หาค่าเศษจากการหารแล้วเก็บผลลัพธ์ไว้ | x %= y → x = x % y | 0 |
<<= | Left Shift and Assign | เลื่อนบิตไปทางซ้ายตามจำนวนตำแหน่งที่ระบุ | x <<= 2 | 40 (บิต 1010 → 101000) |
>>= | Right Shift and Assign | เลื่อนบิตไปทางขวาตามจำนวนตำแหน่งที่ระบุ | x >>= 1 | 5 (บิต 1010 → 0101) |
&= | Bitwise AND and Assign | นำค่า AND ของ บิตทั้งสองด้านมาเก็บ | x &= y | 0 (1010 & 0101 = 0000) |
^= | Bitwise XOR and Assign | นำค่า XOR ของ บิตทั้งสองด้านมาเก็บ | x ^= y | 15 (1010 ^ 0101 = 1111) |
??= | Null-Coalescing Assignment | กำหนดค่าทางขวามือ เฉพาะเมื่อค่าทางซ้ายเป็น null | a ??= 10; | ถ้า a == null → a = 10 |
ตัวอย่างการใช้งาน Assignment Operators
namespace MyConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
int x = 10;
int y = 5;
x += y; // 15
x -= 2; // 13
x *= 2; // 26
x /= 2; // 13
x %= 5; // 3
x <<= 1; // 6
x >>= 2; // 1
x |= 2; // 3
x &= 1; // 1
x ^= 5; // 4
int? a = null;
a ??= 100; // ตั้งค่าเฉพาะเมื่อ a เป็น null
Console.WriteLine($"x = {x}");
Console.WriteLine($"a = {a}");
}
}
}x += y→ บวกค่าyเข้าไปในxx -= 2→ ลบออก 2x *= 2→ คูณด้วย 2x /= 2→ หารด้วย 2x %= 5→ หาค่าเศษจาก 5x <<= 1/x >>= 2→ เลื่อนบิตไปทางซ้ายหรือขวาx |= 2,x &= 1,x ^= 5→ ใช้ Bitwise Operators ร่วมกับ Assignmenta ??= 100→ กำหนด 100 ให้aเฉพาะกรณีที่aเป็น null
ตัวอย่างโปรแกรมจำลองการคำนวณ
namespace MyConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("กรอกจำนวนสินค้า: ");
int quantity = Convert.ToInt32(Console.ReadLine());
Console.Write("กรอกราคาต่อชิ้น: ");
double price = Convert.ToDouble(Console.ReadLine());
double total = 0;
total += quantity * price; // ใช้ Assignment Operator แบบย่อ
Console.WriteLine($"ราคารวมทั้งหมดคือ: {total} บาท");
}
}
}- รับค่าจำนวนสินค้าและราคาต่อชิ้นจากผู้ใช้
- ใช้
+=เพื่อเพิ่มค่าราคารวมเข้าไปในตัวแปรtotal - แสดงผลราคารวมออกทาง Console
ข้อควรระวังในการใช้ Assignment Operator
- อย่าสับสนระหว่าง
=และ===ใช้กำหนดค่า==ใช้เปรียบเทียบค่า
ตัวอย่างความผิดพลาดที่พบบ่อยคือใช้=แทน==ในเงื่อนไขif
- อย่าใช้กับชนิดข้อมูลต่างประเภทโดยไม่แปลงค่า (Type Casting)
เช่นint x = 10.5;จะเกิดข้อผิดพลาด ควรแปลงเป็น(int)10.5ก่อน - ระวังการกำหนดค่าแบบซ้อนหลายชั้น
แม้จะทำได้ แต่ควรเขียนให้ชัดเจนเพื่อป้องกันความสับสน
Assignment Operator เป็นพื้นฐานสำคัญของการเขียนโปรแกรมในภาษา C# เพราะช่วยให้เราสามารถ “เก็บ”, “อัปเดต”, และ “คำนวณค่าข้อมูล” ได้อย่างยืดหยุ่นและมีประสิทธิภาพ การเข้าใจตัวดำเนินการนี้อย่างลึกซึ้งจะทำให้เราสามารถสร้างโค้ดที่สั้น อ่านง่าย และเข้าใจง่ายมากขึ้น
