- Java 21 ที่มีกำหนดเปิดตัวในวันที่ 19/9/2023 รองรับ record patterns ใน switch blocks และ expressions ซึ่งเป็นอัปเดตสำคัญที่ทำให้ Java เข้าใกล้รูปแบบการเขียนโปรแกรมเชิงฟังก์ชันแบบเดียวกับ Kotlin, Rust และ C# มากขึ้น
- Java พัฒนาอย่างรวดเร็วตลอด 10 ปีที่ผ่านมา และตั้งแต่ Java 9 เป็นต้นมาก็มีการออกรุ่นอัปเดตหลักทุก 6 เดือน
- Java 21 ทำให้ record patterns และ switch pattern matching มีสถานะเสถียร พร้อมเปิดทางให้สามารถแสดง algebraic data types ซึ่งเป็นองค์ประกอบสำคัญของการเขียนโปรแกรมเชิงฟังก์ชันได้
- แนวคิดของ algebraic data types อธิบายได้ผ่าน type theory ซึ่งเป็นสาขาหนึ่งของ set theory
- เวอร์ชันใหม่นี้ยังเพิ่มความสามารถด้าน pattern matching ซึ่งช่วยให้ตรวจสอบรูปแบบข้อมูลบางประเภทแบบสถิตได้
- Java 21 ยังเพิ่ม sealed classes หรือ interfaces เพื่อให้นักพัฒนาสามารถควบคุมการโต้ตอบของผู้ใช้กับ library API ได้
- sealed classes หรือ interfaces รองรับ design pattern ที่อิงกับแนวคิดของ sum types ซึ่งหมายความว่า ณ ช่วงเวลาหนึ่ง type จะเป็นหนึ่งในองค์ประกอบย่อยของมันได้
- เวอร์ชันใหม่นี้ยังมี guard clauses ที่ช่วยให้เขียนเงื่อนไขซับซ้อนใน switch statements และ expressions ได้อย่างกระชับ
- Java 21 เพิ่มคลาสข้อยกเว้นใหม่ชื่อ
java.lang.MatchException สำหรับกรณีที่ pattern match ผิดพลาด
- บทความนี้พูดถึงการใช้งาน switch blocks ใน Java 21 และวิธีที่อาจทำให้เกิด MatchException ภายใต้เงื่อนไขบางอย่าง
- MatchException จะเกิดขึ้นเมื่อ switch block ไม่ตรงกับทั้ง selector และรูปแบบที่กำหนดไว้ ซึ่งถือเป็นกรณีที่พบได้ไม่บ่อยมาก
- Java Enhancement Proposal (JEP) 441 ยอมรับว่า record accessor methods ที่โยนข้อยกเว้นเสมอนั้นเป็นกรณีที่ผิดปกติมาก
- บทความนี้ยกตัวอย่าง switch block ที่ทำให้เกิด MatchException จากข้อผิดพลาดการหารด้วย 0 ภายใน guard clause
- ผู้เขียนชี้ว่าสถานการณ์จะซับซ้อนยิ่งขึ้นเมื่อค่าตัวตั้งในการหารเป็นค่าที่เปลี่ยนแปลงได้แบบไดนามิกและอาจเป็น 0
- บทความนี้เป็นส่วนหนึ่งของซีรีส์ที่สำรวจความสามารถใหม่ ๆ ของ Java 21 และในตอนต่อ ๆ ไปจะพาไปดูคุณสมบัติที่น่าสนใจเหล่านี้พร้อมตัวอย่างเชิงปฏิบัติว่าช่วยให้การเขียนโค้ด Java ดีขึ้นได้อย่างไร
- ผู้เขียนระบุว่าหัวข้อบางอย่าง เช่น generics โต้ตอบกับ switch patterns อย่างไร ยังไม่ได้ครอบคลุมในบทความนี้ แต่อาจนำไปพูดถึงในบทความถัดไป
- บทความนี้เกี่ยวข้องกับผู้ที่สนใจ JVM pattern matching, การเขียนโปรแกรมเชิงฟังก์ชัน, Java 21 และ algebraic types
ยังไม่มีความคิดเห็น