Let’s start introducing Pattern Matching in Python 3.10

--

สวัสดีค่ะ ผู้อ่านทุกท่าน!

ในบทความนี้เราจะพาทุกคนไปทำความรู้จักกับ feature ใหม่ที่กำลังจะมาใน Python 3.10 และ developer ทุกคนรอคอย ซึ่งนั่นก็คือ Pattern Matching นั่นเอง เราได้ข่าวมาจาก Python 3.10.0b1 (ซึ่งเป็น beta version ของ 3.10) release มาสดๆ ร้อนๆ เมื่อวันที่ 3 พฤษภาคม 2021 ที่ผ่านมานี่เอง

ใน Python 3.10 จริงๆ แล้วก็มี major new features มากมายเลยทีเดียวค่ะ แต่เราขอหยิบยกเรื่องของ Pattern Matching ที่ developer หลายๆ คน กำลังรอคอย

ก่อนอื่นเลยต้องขออธิบายกันก่อนค่ะ ว่าจริงๆ แล้ว Pattern Matching นั้นคืออะไร จริงๆ แล้วหลายๆ คนอาจจะคุ้นเคยกับสิ่งนี้อยู่แล้ว ถ้าเขียน functional programming มาก่อนหน้านี้ค่ะ

Pattern Matching ถ้าแปลความหมายตรงๆ แล้วก็จะหมายถึง “การเปรียบเทียบค่าใดค่าหนึ่งด้วยรูปแบบบางอย่าง” ถ้าในพื้นฐานของภาษา programming บางภาษา Pattern Matching อาจจะดูคล้ายๆ กับ switch/case แต่มีความ powerful กว่า

เพื่อให้มีความเข้าใจมากขึ้น เราจะมาดูตัวอย่างใน Python กันดีกว่า ว่าเมื่อครั้งที่ยังไม่มี Pattern Matching นั้น เราจะจัดการกับปัญหาตัวอย่างนี้อย่างไร..

เราจะต้องเขียนฟังก์ชันในการที่ตัวละครในเกม หรือ player interact กับเกม โดยมีเงื่อนไข ดังนี้

  • ถ้า player กดปุ่มบังคับทิศทาง เช่น “up”, “down”, “left”, “right” ให้ตัวละครเดินไปตาม direction นั้นๆ
  • ถ้า player กด “pickup” item ให้เก็บ item นั้นๆ ไว้ใน save
  • ถ้า player กด “Quit” ให้ออกจากเกม

สมมติว่าเรามีฟังก์ชันการทำงานต่างๆ ไว้หน้าตาประมาณนี้

มาดูกันว่า เราจะเขียนฟังก์ชันการทำงานเหล่านี้ แบบง่ายๆ โดยใช้ if/elif/else ในภาษา Python ที่ยังไม่มี Pattern Matching นั้นทำอย่างไร

ทีนี้เราลองมาดูหน้าตาของตอนที่เราใช้ Pattern Matching กันบ้าง ว่าจะเป็นยังไง

เราลองมา execute โค้ดด้านบน และดูผลลัพธ์ที่ออกมากันดีกว่าค่ะ

จะเห็นได้ว่า โค้ดที่เขียนด้วย Pattern Matching นั้นลดความซับซ้อนของการทำงานในแต่ละ action ได้ลงไปอีก

ส่วนใครที่อยากรู้ว่า Pattern Matching ใน Python 3.10 ที่ ใช้งานได้อย่างไรอีกบ้าง สามารถอ่านเพิ่มเติมได้ที่นี่เลยค่ะ

Article written by: Sudarat (Gatuk) Chattanon, organizer of PyCon APAC 2021.

ข้อมูลเพิ่มเติมเกี่ยวกับ PyCon APAC 2021 สามารถเข้าไปดูรายละเอียดได้ที่ https://th.pycon.org/

--

--