目次
- 1 1. บทนำ
- 2 2. เหตุผลที่ Python ไม่มีคำสั่ง switch
- 3 3. ตัวอย่างการใช้ if-elif-else
- 4 4. การทำเงื่อนไขแบบเลือกทางด้วยพจนานุกรม(dictionary)
- 5 5. ฟีเจอร์ใหม่ใน Python 3.10: การเพิ่มคำสั่ง match-case
- 6 6. ตัวอย่างการประยุกต์ใช้ match-case
- 7 7. การเปรียบเทียบ if-elif-else, ชนิดพจนานุกรม, และ match-case
- 8 8. สรุป
1. บทนำ
Python นั้นเป็นที่นิยมของโปรแกรมเมอร์จำนวนมากด้วยความเรียบง่ายและไวยากรณ์ที่เข้าใจได้โดยสัญชาตญาณ แต่หลายคนอาจจะแปลกใจที่ไม่มีโครงสร้าง “switch-case” แบบที่มีในภาษาอื่น ดังนั้นใน Python จึงต้องใช้ “if-elif-else” หรือ “ดิกชันนารี (dictionary)” เพื่อให้ได้การทำงานในลักษณะเดียวกัน ในบทความนี้ เราจะอธิบายอย่างเป็นลำดับเกี่ยวกับวิธีการทำเงื่อนไขแบบดั้งเดิมใน Python ทางเลือกที่ใช้ดิกชันนารี และคำสั่ง “match-case” แบบใหม่ที่ถูกเพิ่มเข้ามาใน Python 3.10 ซึ่งจะช่วยให้คุณเรียนรู้วิธีทำเงื่อนไขใน Python อย่างมีประสิทธิภาพและนำไปใช้กับการเขียนโค้ดจริงได้2. เหตุผลที่ Python ไม่มีคำสั่ง switch
เหตุผลที่ Python ไม่ได้นำคำสั่ง switch-case มาใช้ มาจากความเรียบง่ายและความอ่านง่ายของภาษา ผู้ออกแบบ Python มุ่งทำให้ภาษากระชับที่สุด และตัดทอนไวยากรณ์ที่ซ้ำซ้อนหรือยืดเยื้อออกไป แม้คำสั่ง switch จะมีประโยชน์ในภาษาอื่น แต่ใน Python สามารถทำสิ่งเดียวกันได้ด้วยคำสั่ง “if-elif-else” หรือการใช้ชนิดข้อมูลพจนานุกรม จึงถือว่าไม่จำเป็นต้องเพิ่ม switch เข้ามา ในความเป็นจริง เอกสารอย่างเป็นทางการของ Python ก็ระบุว่าสามารถครอบคลุมความสามารถของ switch ได้ด้วยคำสั่ง if-elif-else โค้ดด้านล่างคือตัวอย่างของคำสั่ง switch ในภาษา Cswitch (value) {
case 1:
printf("Value is 1");
break;
case 2:
printf("Value is 2");
break;
default:
printf("Other value");
}
ใน Python สามารถเขียนใหม่ได้ดังนี้value = 1
if value == 1:
print("Value is 1")
elif value == 2:
print("Value is 2")
else:
print("Other value")
ด้วยวิธีนี้ Python ก็สามารถตรวจสอบเงื่อนไขได้อย่างง่ายดายโดยไม่ต้องใช้คำสั่ง switch3. ตัวอย่างการใช้ if-elif-else
วิธีที่พื้นฐานที่สุดในการทำการแตกแขนงเงื่อนไขใน Python คือคำสั่ง “if-elif-else” วิธีนี้มีประสิทธิภาพมากเมื่อจะดำเนินการที่แตกต่างกันตามหลายเงื่อนไข ต่อไปนี้คือตัวอย่างการใช้งานทั่วไปvalue = 100
if value < 50:
print("เป็นค่าขนาดเล็ก")
elif value < 100:
print("เป็นค่าขนาดกลาง")
else:
print("เป็นค่าขนาดใหญ่")
ในโค้ดนี้จะแสดงข้อความที่แตกต่างกันตามค่าของตัวแปร value
คำสั่ง if-elif-else ช่วยให้สามารถทำการแตกแขนงเงื่อนไขที่เรียบง่ายและเข้าใจง่ายได้ปัญหาเมื่อจำนวนเงื่อนไขเพิ่มขึ้น
อย่างไรก็ตาม เมื่อโครงสร้าง if-elif-else มีการซ้อนหลายชั้น โค้ดอาจอ่านได้ยาก โดยเฉพาะเมื่อจัดการกับเงื่อนไขที่ซับซ้อน วิธีที่ใช้「ชนิดข้อมูลแบบพจนานุกรม」ซึ่งจะแนะนำต่อไปนั้นมีประสิทธิผล4. การทำเงื่อนไขแบบเลือกทางด้วยพจนานุกรม(dictionary)
การใช้พจนานุกรมของ Python จะช่วยให้คุณสามารถใช้งานเงื่อนไขที่คล้ายกับ switch-case ได้ พจนานุกรมเป็นโครงสร้างข้อมูลที่เก็บคู่คีย์และค่า ทำให้สามารถแสดงเงื่อนไขหลายแบบได้อย่างกระชับ ในตัวอย่างต่อไปนี้ จะแสดงผลลัพธ์ตามตัวเลขที่ผู้ใช้ป้อนnumbers = {1: "หนึ่ง", 2: "สอง", 3: "สาม"}
value = int(input("กรุณาป้อนตัวเลขตั้งแต่ 1 ถึง 3: "))
if value in numbers:
print(f"ตัวเลขที่เลือก: {numbers[value]}")
else:
print("กรุณาป้อนตัวเลขตั้งแต่ 1 ถึง 3")
ดังที่เห็น การใช้พจนานุกรมช่วยให้โค้ดสั้นและอ่านง่าย แม้จะมีเงื่อนไขจำนวนมากข้อดีของพจนานุกรม
การทำเงื่อนไขด้วยพจนานุกรมมีข้อดีสำคัญคือ แม้จำนวนเงื่อนไขเพิ่มขึ้น โค้ดยังคงอ่านง่ายและบำรุงรักษาได้สะดวก โดยเฉพาะเมื่อมีการประมวลผลตามค่าหลายกรณี จะมีประสิทธิภาพกว่าการใช้คำสั่ง if-elif-else5. ฟีเจอร์ใหม่ใน Python 3.10: การเพิ่มคำสั่ง match-case
คำสั่ง match-case ที่ถูกเพิ่มเข้ามาใน Python 3.10 มีไวยากรณ์ที่ใกล้เคียงกับ switch-case มาก และช่วยให้เขียนเงื่อนไขหลายข้อได้อย่างกระชับ ฟีเจอร์ใหม่นี้โดดเด่นเป็นพิเศษด้านการทำ pattern matching และเมื่อเทียบกับการใช้ if-elif-else แบบเดิมหรือวิธีที่ใช้ดิกชันนารีแล้ว จะช่วยเพิ่มความอ่านง่ายและความสามารถในการบำรุงรักษาของโค้ดอย่างมากไวยากรณ์พื้นฐานของ match-case
ด้านล่างคือตัวอย่างการใช้งานพื้นฐานของคำสั่ง match-casedef check_value(value):
match value:
case 1:
print("เลือก 1 แล้ว")
case 2:
print("เลือก 2 แล้ว")
case _:
print("มีการเลือกค่าที่ไม่ใช่ 1 หรือ 2")
ในโค้ดนี้ จะดำเนินการต่างกันตามค่าของตัวแปร value
ส่วน case _
เป็นการประมวลผลแบบค่าเริ่มต้นที่จะทำงานเมื่อไม่ตรงกับเงื่อนไขใดๆ6. ตัวอย่างการประยุกต์ใช้ match-case
คำสั่ง match-case เหมาะสำหรับการแยกเงื่อนไขที่ซับซ้อนมากขึ้นและการจับคู่แพตเทิร์นด้วยเช่นกัน ตัวอย่างเช่น สามารถประมวลผลตามจำนวนองค์ประกอบของลิสต์หรือชนิดข้อมูลได้match-case ที่รองรับหลายเงื่อนไข
def process_data(data):
match data:
case [x, y]:
print(f"ลิสต์มีองค์ประกอบ 2 ตัว: {x}, {y}")
case [x, y, z]:
print(f"ลิสต์มีองค์ประกอบ 3 ตัว: {x}, {y}, {z}")
case _:
print("จำนวนองค์ประกอบของลิสต์แตกต่างกัน")
ในตัวอย่างนี้ จะดำเนินการต่างกันตามจำนวนองค์ประกอบของลิสต์ จุดเด่นของคำสั่ง match-case คือสามารถเขียนหลายเงื่อนไขและแพตเทิร์นได้อย่างเรียบง่ายเช่นนี้7. การเปรียบเทียบ if-elif-else, ชนิดพจนานุกรม, และ match-case
วิธีการแตกแขนงเงื่อนไขแต่ละแบบมีข้อดีข้อเสียเฉพาะตัว ต่อไปนี้คือตารางเปรียบเทียบวิธีการ | ข้อดี | ข้อเสีย |
---|---|---|
if-elif-else | เรียบง่ายและเข้าใจได้ทันที | เมื่อมีเงื่อนไขมาก โค้ดจะซับซ้อนขึ้น |
ชนิดพจนานุกรม(dictionary) | อ่านง่าย และมีประสิทธิภาพเมื่อมีเงื่อนไขมาก | ไม่ใช่ทุกเงื่อนไขจะใส่ไว้ในพจนานุกรมได้ |
match-case | มีประสิทธิภาพสำหรับการแตกแขนงหลายเงื่อนไขและการจับคู่รูปแบบ | ใช้ได้เฉพาะตั้งแต่ Python 3.10 ขึ้นไปเท่านั้น |