นี่คือคำถามที่เกี่ยวข้อง: ในที่สุดการใช้ประโยคในการทำงานหลังจากกลับมาในสไตล์ที่ไม่ดี / เป็นอันตรายหรือไม่?
ใน Q อ้างอิงแล้วรหัสสุดท้ายเกี่ยวข้องกับโครงสร้างที่ใช้และความจำเป็นในการดึงข้อมูลล่วงหน้า คำถามของฉันแตกต่างออกไปเล็กน้อยและฉันเชื่อว่ามันเป็นสิ่งที่ดีสำหรับผู้ชมที่กว้างขึ้น ตัวอย่างเฉพาะของฉันคือแอป C # winform แต่สิ่งนี้จะใช้กับ C ++ / Java ในที่สุดการใช้งานเช่นกัน
ฉันสังเกตเห็นว่ามีการลองจับสองสามครั้งในที่สุดซึ่งมีโค้ดจำนวนมากที่ไม่เกี่ยวข้องกับข้อยกเว้นและการจัดการ / ล้างข้อมูลที่ฝังอยู่ภายในบล็อก และฉันจะยอมรับความลำเอียงของฉันต่อการพยายามบล็อกที่จับได้แน่นในที่สุดด้วยรหัสที่เกี่ยวข้องกับข้อยกเว้นและการจัดการอย่างใกล้ชิด นี่คือตัวอย่างของสิ่งที่ฉันเห็น
ลองบล็อกจะมีการโทรขั้นต้นจำนวนมากและตัวแปรที่ตั้งค่านำไปสู่รหัสที่สามารถโยนได้ ข้อมูลการบันทึกจะได้รับการตั้งค่าและเรียกใช้ในบล็อกลองด้วย
ในที่สุดบล็อกจะมีการเรียกการจัดรูปแบบแบบฟอร์ม / โมดูล / การควบคุม (แม้แอพกำลังจะปิดตัวลงดังที่แสดงในบล็อก catch) รวมถึงการสร้างวัตถุใหม่เช่นแผงควบคุม
ประมาณ:
methodName (... ) { ลอง { // มีโค้ดสำหรับวิธีการมากมาย ... // รหัสที่สามารถส่ง ... // มีโค้ดมากขึ้นสำหรับวิธีการและการส่งคืน ... } จับ (บางสิ่ง) {// จัดการข้อยกเว้น} ในที่สุด { // การล้างข้อมูลบางอย่างเกิดจากข้อยกเว้นปิดสิ่งต่างๆ // โค้ดเพิ่มเติมสำหรับสิ่งที่สร้างขึ้น (ไม่สนใจว่ามีข้อยกเว้นใด ๆ ที่ส่งออกไป) ... // อาจสร้างวัตถุเพิ่มเติม } }
รหัสทำงานได้ดังนั้นจึงมีค่าบางอย่าง มันไม่ได้ถูกห่อหุ้มอย่างดีและตรรกะนั้นค่อนข้างซับซ้อน ฉัน (อย่างเจ็บปวด) คุ้นเคยกับความเสี่ยงในการเปลี่ยนรหัสรอบ ๆ และการปรับโครงสร้างใหม่ดังนั้นคำถามของฉันจึงลดลงเพื่อต้องการทราบประสบการณ์ของผู้อื่นด้วยรหัสที่มีโครงสร้างคล้ายกัน
สไตล์ที่ไม่ดีแสดงให้เห็นถึงการเปลี่ยนแปลงหรือไม่ มีใครถูกไฟไหม้ไม่ดีจากสถานการณ์ที่คล้ายกัน? คุณอยากแบ่งปันรายละเอียดของประสบการณ์ที่ไม่ดีนั้นหรือไม่? ปล่อยให้มันเป็นเพราะฉันทำปฏิกิริยามากเกินไปและมันก็ไม่ได้แย่ขนาดนั้นหรือ รับประโยชน์การบำรุงรักษาของการจัดระเบียบสิ่งต่าง ๆ ?
finally
ทำใน C #) เทียบเท่า C ++ คืออะไร? รหัสหลังจากสิ่งที่ผมคิดว่าการเป็นcatch
และที่ใช้เหมือนกันสำหรับรหัสหลังจาก C finally
#
Environment.FailFast()
; มันอาจไม่ถูกดำเนินการหากคุณมีข้อยกเว้นที่ไม่ได้ตรวจสอบ และมันจะซับซ้อนยิ่งขึ้นถ้าคุณมีบล็อกตัววนซ้ำโดยfinally
ที่คุณวนซ้ำด้วยตนเอง
finally
(และไม่จำเป็นต้อง) การใช้งานที่ดีทั้งหมดได้รับการคุ้มครองภายใต้ RAII / RRID / SBRM (ตัวย่อที่คุณต้องการ)