if...else
และ switch
เป็นโครงสร้างควบคุมการทำงาน (control flow) ที่ใช้ในการตรวจสอบเงื่อนไข แต่มีลักษณะการใช้งานและข้อดีข้อเสียต่างกันครับ
1. ลักษณะการทำงาน
if...else
- ใช้ตรวจสอบเงื่อนไขแบบ ตรรกะทั่วไป (Boolean expression) ได้หลากหลาย เช่น
<
,>
,<=
,>=
,==
,===
,!=
,!==
หรือแม้แต่การเชื่อมหลายเงื่อนไขด้วย&&
และ||
- แต่ละเงื่อนไขสามารถซับซ้อนมากได้
switch
- ใช้เมื่อมีการตรวจค่า ตัวแปรเดียว หรือ expression เดียว ว่าตรงกับกรณีใด (
case
) บ้าง - ไม่เหมาะกับเงื่อนไขที่เป็นช่วงตัวเลขหรือการเปรียบเทียบมาก ๆ
2. ข้อดี / ข้อเสีย
ประเด็น | if...else | switch |
---|---|---|
ความยืดหยุ่น | ✅ สูง — ใช้เงื่อนไขซับซ้อน, หลายตัวแปร, คำนวณระหว่างเปรียบเทียบได้ | ❌ จำกัด — เปรียบเทียบค่ากับ case แบบตรงตัว (หรือ expression ที่คืนค่าเดียว) |
ความอ่านง่าย | ❌ ถ้าเงื่อนไขหลายชั้นมาก จะอ่านยากและรก | ✅ อ่านง่ายถ้ามีการตรวจค่าที่ชัดเจนหลายกรณี |
ความเร็ว (สำหรับหลายเงื่อนไข) | อาจช้ากว่านิดหน่อย เพราะต้องเช็กแต่ละเงื่อนไขแบบลำดับ | อาจเร็วกว่าเล็กน้อย เพราะเป็น jump table (ในบางภาษาหรือบาง compiler) |
ความผิดพลาด | ใช้เงื่อนไขซับซ้อนอาจพลาด logic ได้ง่าย | อาจลืมใส่ break ทำให้ fall-through ไป case ต่อไปโดยไม่ตั้งใจ |
การเพิ่ม/แก้ไข | ยืดหยุ่นมาก เพิ่มเงื่อนไขได้อิสระ | ง่ายถ้ากรณีเพิ่มเป็นค่าที่ชัดเจน |
การใช้งานเหมาะกับ | เงื่อนไขซับซ้อน, หลายตัวแปร, การเปรียบเทียบช่วง | ตรวจค่าตัวแปรเดียวที่มีตัวเลือกตายตัว เช่น เมนู, สถานะ, คำสั่ง |
3. คำแนะนำในการเลือกใช้
- ใช้
if...else
→ ถ้าเงื่อนไขซับซ้อน, เกี่ยวข้องกับหลายตัวแปร, มีการเปรียบเทียบช่วง - ใช้
switch
→ ถ้าต้องตรวจค่าของตัวแปรเดียวที่มีตัวเลือกแน่นอน และต้องการความอ่านง่าย
ตัวอย่าง 1: if...else
✅ ข้อดี: ปรับเป็นเงื่อนไขซับซ้อนได้ง่าย เช่น <
, >
, &&
❌ ข้อเสีย: ถ้ากรณีเยอะ โค้ดยาวและอ่านยาก
ตัวอย่าง 2: switch
✅ ข้อดี: อ่านง่ายกว่าเมื่อเป็นการตรวจค่าตัวแปรเดียวหลายกรณี
❌ ข้อเสีย: ไม่เหมาะกับเงื่อนไขซับซ้อน เช่น dayNumber >= 6 && dayNumber <= 7