Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

การจัดการข้อผิดพลาด (Error Handling)

ข้อผิดพลาดเป็นความจริงที่หลีกเลี่ยงไม่ได้ในโลกของซอฟต์แวร์ ภาษา Rust จึงมีฟีเจอร์มากมายสำหรับใช้รับมือกับสถานการณ์ที่เกิดความผิดพลาดขึ้น ในหลายกรณี Rust กำหนดให้คุณต้องรับรู้ถึงโอกาสที่อาจเกิดข้อผิดพลาดขึ้นและดำเนินการบางอย่างเสียก่อน โค้ดของคุณถึงจะสามารถคอมไพล์ผ่านได้ ข้อกำหนดนี้ช่วยให้โปรแกรมของคุณมีความเสถียร (robust) มากขึ้น โดยรับประกันว่าคุณจะพบข้อผิดพลาดและจัดการกับมันได้อย่างเหมาะสมก่อนที่จะนำโค้ดไปติดตั้งใช้งานจริงบนระบบโปรดักชัน!

Rust แบ่งประเภทของข้อผิดพลาดออกเป็นสองกลุ่มใหญ่ ๆ ได้แก่ ข้อผิดพลาดที่สามารถแก้ไขได้ (recoverable errors) และข้อผิดพลาดที่ไม่สามารถแก้ไขได้ (unrecoverable errors) สำหรับ ข้อผิดพลาดที่สามารถแก้ไขได้ เช่น ข้อผิดพลาดประเภท ไม่พบไฟล์ (file not found) ส่วนใหญ่แล้วเราก็แค่อยากแจ้งปัญหาให้ผู้ใช้ทราบและทดลองทำคำสั่งนั้นใหม่อีกครั้ง ส่วน ข้อผิดพลาดที่ไม่สามารถแก้ไขได้ มักจะเป็นสัญญาณบ่งชี้ถึงบั๊กในระบบเสมอ เช่น พยายามเข้าถึงตำแหน่งข้อมูลที่อยู่นอกขอบเขตของอาร์เรย์ ดังนั้นในกรณีเช่นนี้เราจึงต้องการหยุดการทำงานของโปรแกรมทันที

ภาษาโปรแกรมส่วนใหญ่มักไม่ได้แยกแยะความแตกต่างระหว่างข้อผิดพลาดสองประเภทนี้ และจัดการข้อผิดพลาดทั้งสองแบบในลักษณะเดียวกันผ่านกลไกต่าง ๆ เช่น ข้อยกเว้น (exceptions) แต่ทว่า Rust ไม่มีระบบ exceptions แต่จะมีประเภทข้อมูล Result<T, E> สำหรับจัดการข้อผิดพลาดที่แก้ไขได้ และใช้มาโคร panic! เพื่อหยุดการทำงานของโปรแกรมทันทีเมื่อเจอกับข้อผิดพลาดที่แก้ไขไม่ได้ บทนี้จะอธิบายเริ่มจากการเรียกใช้งาน panic! ก่อน จากนั้นจึงพูดคุยเกี่ยวกับการส่งคืนค่าแบบ Result<T, E> นอกจากนี้ เราจะมาเจาะลึกประเด็นที่ต้องพิจารณาเมื่อต้องตัดสินใจเลือกว่าควรจะพยายามกู้คืนระบบจากข้อผิดพลาด หรือหยุดการทำงานของโปรแกรมไปเลย