Ternary Operator ในภาษา C#
Ternary Operator (อ่านว่า “เทอร์นารี”) คือ ตัวดำเนินการทางตรรกะที่มี 3 ส่วน ใช้เขียนคำสั่งเงื่อนไขแบบย่อในภาษา C# แทนการใช้โครงสร้าง if...else แบบเต็มรูปแบบ
โครงสร้างของ Ternary Operator คือ
เงื่อนไข ? ค่าถ้าเป็นจริง : ค่าถ้าเป็นเท็จ;
ทำหน้าที่ตรวจสอบว่า “เงื่อนไข” เป็นจริงหรือเท็จ
- ถ้าเป็นจริง (
true) → จะได้ค่าฝั่งซ้ายของเครื่องหมาย: - ถ้าเป็นเท็จ (
false) → จะได้ค่าฝั่งขวาของเครื่องหมาย:
ใช้เมื่อต้องการเขียนโค้ดตัดสินใจที่สั้น กระชับ และอยู่ในบรรทัดเดียว
รูปแบบโครงสร้าง (Syntax)
variable = (condition) ? value_if_true : value_if_false;
- condition คือเงื่อนไขที่ต้องการตรวจสอบ (จะให้ค่าเป็น
trueหรือfalse) - value_if_true คือค่าที่จะถูกกำหนดให้ถ้าเงื่อนไขเป็นจริง
- value_if_false คือค่าที่จะถูกกำหนดให้ถ้าเงื่อนไขเป็นเท็จ
ตัวอย่างการใช้งานพื้นฐาน
int age = 18;
string result = (age >= 18) ? "บรรลุนิติภาวะ" : "ยังไม่บรรลุนิติภาวะ";
Console.WriteLine(result);- ตรวจสอบเงื่อนไข
(age >= 18) - ถ้าเป็นจริง (
true) → จะได้ข้อความ"บรรลุนิติภาวะ" - ถ้าเป็นเท็จ (
false) → จะได้ข้อความ"ยังไม่บรรลุนิติภาวะ" - ผลลัพธ์จะถูกเก็บในตัวแปร
result
เปรียบเทียบกับคำสั่ง if…else
Ternary Operator เป็นเพียงรูปแบบย่อของ if...else เช่นเดียวกับตัวอย่างต่อไปนี้
string message;
if (age >= 18)
{
message = "บรรลุนิติภาวะ";
}
else
{
message = "ยังไม่บรรลุนิติภาวะ";
}แบบ Ternary Operator
string message = (age >= 18) ? "บรรลุนิติภาวะ" : "ยังไม่บรรลุนิติภาวะ";ทั้งสองแบบให้ผลลัพธ์เหมือนกัน แต่ Ternary Operator เขียนสั้นกว่าและอ่านง่ายกว่าในกรณีที่เป็นเงื่อนไขสั้น ๆ
การใช้งานในนิพจน์ (Expression)
Ternary Operator สามารถใช้ในนิพจน์ที่คืนค่าได้โดยตรง เช่น
Console.WriteLine((5 > 3) ? "5 มากกว่า 3" : "5 น้อยกว่า 3");เหมาะกับการใช้ในกรณีต้องแสดงผลหรือคำนวณค่าในบรรทัดเดียว
การใช้ Ternary Operator ร่วมกับการคำนวณ
Ternary Operator สามารถใช้กับการคำนวณตัวเลขได้เช่นกัน
int score = 75;
string grade = (score >= 50) ? "ผ่าน" : "ไม่ผ่าน";
Console.WriteLine($"คะแนน {score} ผลการสอบ: {grade}");- ถ้าคะแนนมากกว่าหรือเท่ากับ 50 จะได้
"ผ่าน" - ถ้าคะแนนน้อยกว่า 50 จะได้
"ไม่ผ่าน"
การซ้อน Ternary Operator (Nested)
สามารถซ้อน Ternary Operator เพื่อทำเงื่อนไขหลายระดับได้ แต่ควรระวังเรื่องความซับซ้อนในการอ่านโค้ด
int score = 85;
string grade = (score >= 80) ? "ดีมาก" :
(score >= 50) ? "ผ่าน" : "ไม่ผ่าน";
Console.WriteLine($"คะแนน: {score} เกรด: {grade}");- ถ้า
score >= 80→ แสดงข้อความ “ดีมาก” - ถ้า
score >= 50→ แสดงข้อความ “ผ่าน” - ถ้าไม่เข้าเงื่อนไขใดเลย → แสดงข้อความ “ไม่ผ่าน”
หมายเหตุ: แม้สามารถซ้อนได้ แต่ควรใช้เท่าที่จำเป็น เพื่อให้อ่านง่ายและเข้าใจได้เร็ว
การใช้ Ternary Operator กับประเภทข้อมูลอื่น
Ternary Operator สามารถใช้ได้กับทุกชนิดข้อมูล ไม่ว่าจะเป็น int, string, bool, double, หรือแม้แต่ object
bool isMember = true;
double discount = isMember ? 0.2 : 0.0;
Console.WriteLine($"ส่วนลดของคุณคือ {discount * 100}%");- ถ้าเป็นสมาชิก (
isMember == true) จะได้ส่วนลด 20% - ถ้าไม่ใช่สมาชิก จะไม่ได้ส่วนลด
การใช้ร่วมกับ Null-Checking
Ternary Operator สามารถใช้ร่วมกับการตรวจสอบค่า null เพื่อหลีกเลี่ยง error ได้ เช่น
string? name = null;
string displayName = (name != null) ? name : "ไม่ระบุชื่อ";
Console.WriteLine(displayName);- ตรวจสอบว่าตัวแปร
nameเป็น null หรือไม่ - ถ้าเป็น null → แสดงข้อความ “ไม่ระบุชื่อ”
- ถ้าไม่เป็น null → แสดงค่าของ
name
ใน C# 8.0 ขึ้นไป สามารถใช้ ?? (Null-Coalescing Operator) แทนได้ เช่น
string displayName = name ?? "ไม่ระบุชื่อ";ข้อควรระวังในการใช้ Ternary Operator
- อย่าใช้ซ้อนหลายระดับมากเกินไป เพราะจะทำให้โค้ดอ่านยากและสับสน
- ใช้เฉพาะในกรณีเงื่อนไขง่าย ๆ เช่น การตรวจสอบค่าเดียวหรือเงื่อนไขตรงไปตรงมา
- หลีกเลี่ยงการใช้ในกรณีที่มี side effect เช่น การเรียกฟังก์ชันที่เปลี่ยนค่าในระบบ
Ternary Operator เป็นเครื่องมือที่ช่วยให้โค้ดในภาษา C# สั้น กระชับ และมีประสิทธิภาพ โดยเฉพาะในกรณีที่มีการตรวจสอบเงื่อนไขง่าย ๆ เพียงเงื่อนไขเดียว ถึงแม้จะใช้งานได้หลากหลาย แต่ก็ควรใช้ด้วยความระมัดระวัง เพื่อไม่ให้โค้ดซับซ้อนหรืออ่านยาก
