Dart: Exception VS Error

Dart Jun 7, 2020

แน่นอนว่าการเขียนโปรแกรมนั้นเราคงคาดหวังแต่ 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! 📚


Tags

Pittawat Taveekitworachai

A CS student who passionate about web and mobile technology with the belief that technology can enhance people's life.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.