Ternary Operator ในภาษา C#

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 คือค่าที่จะถูกกำหนดให้ถ้าเงื่อนไขเป็นเท็จ

ตัวอย่างการใช้งานพื้นฐาน

C#
int age = 18;
string result = (age >= 18) ? "บรรลุนิติภาวะ" : "ยังไม่บรรลุนิติภาวะ";

Console.WriteLine(result);
  • ตรวจสอบเงื่อนไข (age >= 18)
  • ถ้าเป็นจริง (true) → จะได้ข้อความ "บรรลุนิติภาวะ"
  • ถ้าเป็นเท็จ (false) → จะได้ข้อความ "ยังไม่บรรลุนิติภาวะ"
  • ผลลัพธ์จะถูกเก็บในตัวแปร result

เปรียบเทียบกับคำสั่ง if…else

Ternary Operator เป็นเพียงรูปแบบย่อของ if...else เช่นเดียวกับตัวอย่างต่อไปนี้

C#
string message;
if (age >= 18)
{
    message = "บรรลุนิติภาวะ";
}
else
{
    message = "ยังไม่บรรลุนิติภาวะ";
}

แบบ Ternary Operator

C#
string message = (age >= 18) ? "บรรลุนิติภาวะ" : "ยังไม่บรรลุนิติภาวะ";

ทั้งสองแบบให้ผลลัพธ์เหมือนกัน แต่ Ternary Operator เขียนสั้นกว่าและอ่านง่ายกว่าในกรณีที่เป็นเงื่อนไขสั้น ๆ

การใช้งานในนิพจน์ (Expression)

Ternary Operator สามารถใช้ในนิพจน์ที่คืนค่าได้โดยตรง เช่น

C#
Console.WriteLine((5 > 3) ? "5 มากกว่า 3" : "5 น้อยกว่า 3");

เหมาะกับการใช้ในกรณีต้องแสดงผลหรือคำนวณค่าในบรรทัดเดียว

การใช้ Ternary Operator ร่วมกับการคำนวณ

Ternary Operator สามารถใช้กับการคำนวณตัวเลขได้เช่นกัน

C#
int score = 75;
string grade = (score >= 50) ? "ผ่าน" : "ไม่ผ่าน";
Console.WriteLine($"คะแนน {score} ผลการสอบ: {grade}");
  • ถ้าคะแนนมากกว่าหรือเท่ากับ 50 จะได้ "ผ่าน"
  • ถ้าคะแนนน้อยกว่า 50 จะได้ "ไม่ผ่าน"

การซ้อน Ternary Operator (Nested)

สามารถซ้อน Ternary Operator เพื่อทำเงื่อนไขหลายระดับได้ แต่ควรระวังเรื่องความซับซ้อนในการอ่านโค้ด

C#
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

C#
bool isMember = true;
double discount = isMember ? 0.2 : 0.0;

Console.WriteLine($"ส่วนลดของคุณคือ {discount * 100}%");
  • ถ้าเป็นสมาชิก (isMember == true) จะได้ส่วนลด 20%
  • ถ้าไม่ใช่สมาชิก จะไม่ได้ส่วนลด

การใช้ร่วมกับ Null-Checking

Ternary Operator สามารถใช้ร่วมกับการตรวจสอบค่า null เพื่อหลีกเลี่ยง error ได้ เช่น

C#
string? name = null;
string displayName = (name != null) ? name : "ไม่ระบุชื่อ";
Console.WriteLine(displayName);
  • ตรวจสอบว่าตัวแปร name เป็น null หรือไม่
  • ถ้าเป็น null → แสดงข้อความ “ไม่ระบุชื่อ”
  • ถ้าไม่เป็น null → แสดงค่าของ name

ใน C# 8.0 ขึ้นไป สามารถใช้ ?? (Null-Coalescing Operator) แทนได้ เช่น

C#
string displayName = name ?? "ไม่ระบุชื่อ";

ข้อควรระวังในการใช้ Ternary Operator

  1. อย่าใช้ซ้อนหลายระดับมากเกินไป เพราะจะทำให้โค้ดอ่านยากและสับสน
  2. ใช้เฉพาะในกรณีเงื่อนไขง่าย ๆ เช่น การตรวจสอบค่าเดียวหรือเงื่อนไขตรงไปตรงมา
  3. หลีกเลี่ยงการใช้ในกรณีที่มี side effect เช่น การเรียกฟังก์ชันที่เปลี่ยนค่าในระบบ

Ternary Operator เป็นเครื่องมือที่ช่วยให้โค้ดในภาษา C# สั้น กระชับ และมีประสิทธิภาพ โดยเฉพาะในกรณีที่มีการตรวจสอบเงื่อนไขง่าย ๆ เพียงเงื่อนไขเดียว ถึงแม้จะใช้งานได้หลากหลาย แต่ก็ควรใช้ด้วยความระมัดระวัง เพื่อไม่ให้โค้ดซับซ้อนหรืออ่านยาก

แชร์เรื่องนี้