คำตอบอื่น ๆ ครอบคลุมอยู่มาก แต่ "มันคือนิพจน์" ไม่ได้อธิบายว่าทำไมจึงมีประโยชน์ ...
ในภาษาเช่น C ++ และ C # คุณสามารถกำหนดฟิลด์แบบอ่านอย่างเดียวในเครื่อง (ภายในเนื้อความวิธีการ) โดยใช้ สิ่งนี้ไม่สามารถทำได้ด้วยคำสั่ง if / then ทั่วไปเนื่องจากต้องกำหนดค่าของฟิลด์แบบอ่านอย่างเดียวภายในคำสั่งเดียวนั้น:
readonly int speed = (shiftKeyDown) ? 10 : 1;
ไม่เหมือนกับ:
readonly int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a readonly
else
speed = 1; // error
ในทำนองเดียวกันคุณสามารถฝังนิพจน์ระดับตติยภูมิในโค้ดอื่น ๆ เช่นเดียวกับการทำให้ซอร์สโค้ดมีขนาดกะทัดรัดมากขึ้น (และในบางกรณีก็สามารถอ่านได้มากขึ้น) ยังสามารถทำให้โค้ดเครื่องที่สร้างขึ้นมีขนาดกะทัดรัดและมีประสิทธิภาพมากขึ้น:
MoveCar((shiftKeyDown) ? 10 : 1);
... อาจสร้างรหัสน้อยกว่าที่ต้องเรียกวิธีเดิมซ้ำสอง:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
แน่นอนว่ามันเป็นรูปแบบที่สะดวกและกระชับกว่าด้วย (พิมพ์น้อยลงซ้ำน้อยลงและสามารถลดโอกาสที่จะเกิดข้อผิดพลาดได้หากคุณต้องทำโค้ดซ้ำกันใน if / else) ในกรณี "รูปแบบทั่วไป" ที่สะอาดเช่นนี้:
object thing = (reference == null) ? null : reference.Thing;
... มันเร็วกว่าในการอ่าน / แยกวิเคราะห์ / ทำความเข้าใจ (เมื่อคุณเคยชินกับมันแล้ว) กว่าถ้าเทียบเท่ากับ if / else ที่ยืดยาวดังนั้นจึงสามารถช่วยให้คุณ 'grok' โค้ดได้เร็วขึ้น
แน่นอนเพียงเพราะมันมีประโยชน์ไม่ได้หมายความว่ามันเป็นสิ่งที่ดีที่สุดที่จะใช้ในทุกกรณี ฉันขอแนะนำให้ใช้สำหรับโค้ดสั้น ๆ ที่ความหมายชัดเจนเท่านั้น (หรือทำให้ชัดเจนยิ่งขึ้น) โดยใช้?:
- ถ้าคุณใช้ในโค้ดที่ซับซ้อนมากขึ้นหรือซ้อนตัวดำเนินการที่เกี่ยวข้องกันมันอาจทำให้โค้ดอ่านยากอย่างน่ากลัว .