Dart: Exception VS Error

Published on

Authored by Pete. Pittawat Taveekitworachai.


แน่นอนว่าการเขียนโปรแกรมนั้นเราคงคาดหวังแต่ Happy Path ไม่ได้ หลายครั้งที่เราต้องคิดเผื่อเหตุการณ์ที่ไม่ได้เป็นไปในทางที่เราคาดหวังด้วย ซึ่งแน่นอนละว่าวิธีทั่วไปที่เราใช้กันในการรับมือกับเหตุการณ์ไม่คาดหวังก็คือ Error และ Exception นั่นเอง แต่สองคำนี้มันต่างกันยังไงละ?


TLDR;

Error คือ ข้อผิดพลาดที่เราไม่สามารถคาดการณ์ได้

Exception คือ ข้อผิดพลาดที่เราสามารถคาดการณ์ได้


Error

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

ตัวอย่างของ Error เช่น NoSuchMethodError, TypeError


Exception

Exception คือ ข้อผิดพลาดที่เราคาดการณ์ได้ และควรเขียนโปรแกรมเพื่อรองรับเหตุการณ์นั้น ๆ ไว้ เช่น การเชื่อมต่อไปยัง API ภายนอก เราสามารถคาดการณ์ได้ว่า ข้อมูลที่เราร้องขออาจจะไม่ได้รับกลับมาเสมอไป เช่น Server ปลายทางอาจจะล่ม หรือผู้ใช้งานไม่ได้เชื่อมต่อกับเครือข่าย หากเป็นกรณีเหล่านี้ ท่าทั่วไปที่เราใช้กัน และเห็นได้ทั่วไปเพื่อดักจับข้อผิดพลาดต่าง ๆ จะเป็นการใช้ try-catch (try-except ในบางภาษา) นั่นเอง แต่ว่าการที่เราจะสามารถดัก Exception เพื่อไปดำเนินการต่อไปอย่างถูกต้องนั้น เราเองก็ควรที่จะมีการ throw Exception ที่ดีตั้งแต่แรก เพื่อให้ดำเนินการต่อได้อย่างเหมาะสม

ตัวอย่างของ Exception เช่น IntegerDivisionByZeroException, TimeoutException


Trick

ถ้าไม่จำเป็นเราไม่ควร throw Error/Exception จาก Base Class เพราะนั่นจะทำให้ผู้ใช้งาน (กรณีของ Error) หรือโปรแกรมเมอร์เอง (กรณีของ Exception) ไม่รู้รายละเอียดที่แน่ชัดว่าข้อผิดพลาดนั้นมาจากไหน ซึ่งทำให้เราระมัดระวัง หรือจัดการข้อผิดพลาดนั้นได้ยากขึ้น


Summary

Error เป็นข้อผิดพลาดที่เกิดขึ้นโดยที่เราไม่สามารถคาดการณ์ได้ โดยทั่วไปโปรแกรมจะมี Error เพื่อบอกผู้ใช้ว่าเกิดอะไรขึ้น

Exception เป็นข้อผิดพลาดที่เราคาดการณ์ได้ ซึ่งเรามักจะดัก Exception ผ่าน try-catch เพื่อนำไปดำเนินการต่อตามที่เราต้องการนั่นเอง


📚 Hope you enjoy reading! 📚