มีข้อกำหนดมากมายที่จำเป็นสำหรับระบบในการถ่ายทอดและจัดการข้อยกเว้นอย่างเหมาะสม นอกจากนี้ยังมีตัวเลือกมากมายสำหรับภาษาที่เลือกจากการนำแนวคิดไปใช้
ข้อกำหนดสำหรับการยกเว้น (ตามลำดับโดยเฉพาะ):
เอกสาร : ภาษาควรมีค่าเฉลี่ยในการยกเว้นเอกสารที่ API สามารถใช้งานได้ โดยทั่วไปแล้วสื่อเอกสารนี้ควรใช้กับเครื่องเพื่อให้คอมไพเลอร์และ IDE สามารถให้การสนับสนุนแก่โปรแกรมเมอร์
ส่งสถานการณ์พิเศษ : อันนี้ชัดเจนเพื่อให้ฟังก์ชั่นในการถ่ายทอดสถานการณ์ที่ป้องกันไม่ให้การทำงานที่เรียกว่าดำเนินการตามที่คาดไว้ ในความคิดของฉันมีสามประเภทใหญ่ของสถานการณ์เช่นนี้:
2.1 ข้อบกพร่องในรหัสที่ทำให้ข้อมูลบางอย่างไม่ถูกต้อง
2.2 ปัญหาในการกำหนดค่าหรือทรัพยากรภายนอกอื่น ๆ
2.3 ทรัพยากรที่ไม่น่าเชื่อถืออย่างแท้จริง (เครือข่ายระบบไฟล์ฐานข้อมูลผู้ใช้ปลายทางเป็นต้น) สิ่งเหล่านี้เป็นเรื่องเล็ก ๆ น้อย ๆ เนื่องจากลักษณะที่ไม่น่าเชื่อถือของพวกเขาควรให้เราคาดหวังความล้มเหลวเป็นระยะ ๆ ในกรณีนี้สถานการณ์เหล่านี้จะถือว่ายอดเยี่ยมหรือไม่
ให้ข้อมูลที่เพียงพอสำหรับรหัสในการจัดการ : ข้อยกเว้นควรให้ข้อมูลที่เพียงพอแก่ผู้ใช้เพื่อให้สามารถตอบสนองและจัดการกับสถานการณ์ได้ ข้อมูลควรเพียงพอเช่นกันเมื่อบันทึกข้อยกเว้นนี้จะให้บริบทที่เพียงพอแก่โปรแกรมเมอร์เพื่อระบุและแยกคำแถลงที่กระทำผิดและจัดหาวิธีแก้ปัญหา
ให้ความมั่นใจแก่โปรแกรมเมอร์เกี่ยวกับสถานะปัจจุบันของสถานะการเรียกใช้รหัสของเขา : ความสามารถในการจัดการข้อยกเว้นของระบบซอฟต์แวร์ควรมีเพียงพอที่จะให้การป้องกันที่จำเป็นขณะที่อยู่ห่างจากโปรแกรมเมอร์เพื่อให้เขาสามารถจดจ่อกับงานที่ มือ.
เพื่อให้ครอบคลุมถึงวิธีการต่อไปนี้ถูกนำไปใช้ในภาษาต่างๆ:
ข้อยกเว้นที่ตรวจสอบ มีวิธีที่ดีในการจัดทำเอกสารข้อยกเว้นและในทางทฤษฎีเมื่อดำเนินการอย่างถูกต้องควรให้ความมั่นใจอย่างเพียงพอว่าทุกอย่างดี อย่างไรก็ตามค่าใช้จ่ายดังกล่าวทำให้หลายคนรู้สึกว่ามีประสิทธิผลมากกว่าที่จะหลีกเลี่ยงโดยการกลืนข้อยกเว้นหรือโยนทิ้งเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบอีกครั้ง เมื่อใช้ข้อยกเว้นที่ตรวจสอบอย่างไม่เหมาะสมก็จะมีประโยชน์ นอกจากนี้การตรวจสอบข้อยกเว้นทำให้ยากในการสร้าง API ที่เสถียรในเวลา การใช้งานระบบทั่วไปภายในโดเมนที่เฉพาะเจาะจงจะทำให้เกิดสถานการณ์ที่ไม่ธรรมดาซึ่งยากต่อการบำรุงรักษาโดยใช้ข้อยกเว้นที่ตรวจสอบ แต่เพียงผู้เดียว
ข้อยกเว้นที่ไม่ได้ตรวจสอบ - มีความหลากหลายมากกว่าข้อยกเว้นที่ตรวจสอบพวกเขาไม่สามารถจัดทำเอกสารสถานการณ์พิเศษที่เป็นไปได้ของการใช้งานที่ระบุ พวกเขาพึ่งพาเอกสารแบบเฉพาะกิจถ้าทั้งหมด สิ่งนี้จะสร้างสถานการณ์ที่ธรรมชาติที่ไม่น่าเชื่อถือของสื่อถูกหลอกลวงโดย API ที่ให้ความน่าเชื่อถือ นอกจากนี้เมื่อโยนข้อยกเว้นเหล่านี้หลุดความหมายของพวกเขาในขณะที่พวกเขาย้ายกลับขึ้นไปในชั้นนามธรรม เนื่องจากพวกเขาได้รับการบันทึกไม่ดีโปรแกรมเมอร์จึงไม่สามารถกำหนดเป้าหมายได้อย่างเฉพาะเจาะจงและมักจะต้องใช้เครือข่ายที่กว้างกว่าที่จำเป็นเพื่อให้แน่ใจว่าระบบรองหากพวกเขาล้มเหลวอย่าทำให้ระบบทั้งหมดล้มเหลว ซึ่งนำเรากลับไปที่ข้อยกเว้นการตรวจสอบปัญหาการกลืนที่ให้ไว้
Multistate return types ที่ นี่เป็นการพึ่งพาชุด disjoint, tuple หรือแนวคิดที่คล้ายกันอื่น ๆ เพื่อส่งคืนผลลัพธ์ที่คาดหวังหรือวัตถุที่แสดงถึงข้อยกเว้น ที่นี่ไม่มีการคลายสแต็กไม่มีการตัดผ่านโค้ดทุกอย่างดำเนินการตามปกติ แต่ค่าส่งคืนจะต้องได้รับการตรวจสอบความผิดพลาดก่อนดำเนินการต่อ ฉันยังไม่ได้ทำงานกับเรื่องนี้เลยดังนั้นจึงไม่สามารถแสดงความคิดเห็นจากประสบการณ์ที่ฉันรับทราบว่ามันช่วยแก้ปัญหาข้อยกเว้นบางอย่างผ่านการไหลปกติ แต่ก็ยังจะประสบปัญหาเดียวกันมากกับข้อยกเว้นที่ตรวจสอบว่าน่าเบื่อและตลอดเวลา
ดังนั้นคำถามคือ:
ประสบการณ์ของคุณในเรื่องนี้คืออะไรและตามที่คุณเป็นผู้สมัครที่ดีที่สุดในการสร้างระบบการจัดการข้อยกเว้นที่ดีสำหรับภาษาที่จะมี?
แก้ไข: ไม่กี่นาทีหลังจากเขียนคำถามนี้ฉันเจอโพสต์นี้น่ากลัว!
noexcept
เรื่องราวใน C ++ สามารถให้ข้อมูลเชิงลึกที่ดีมากสำหรับ EH ใน C # และ Java เช่นกัน)