คำถามติดแท็ก exceptions

ข้อยกเว้นคือการเกิดขึ้นในกระบวนการแอปพลิเคชันที่ต้องการเบี่ยงเบนจากโฟลว์ปกติของโปรแกรม

5
ซอฟต์แวร์ที่ซับซ้อนควรใช้ความซ้ำซ้อน / ความทนทานมากเพียงใด
จุดเน้นของคำถามนี้:ซอฟต์แวร์บางตัวทำงาน "งานพิเศษ" เพื่อเพิ่มโอกาสของผลลัพธ์ "ประสบความสำเร็จ / เป็นที่น่าพอใจที่สุด" แม้จะมีข้อผิดพลาดภายในหนึ่งครั้งหรือมากกว่าในซอฟต์แวร์ซึ่งต้องใช้เวลาดำเนินการนานขึ้นเมื่อเกิดข้อผิดพลาดเหล่านั้น สิ่งเหล่านี้เกิดขึ้นโดยที่ผู้ใช้ไม่ทราบถ้าผลลัพธ์สำเร็จ คำจำกัดความของซอฟต์แวร์ที่ซับซ้อน: มีโค้ดที่เขียนโดย (สนับสนุนจาก) นักพัฒนาซอฟต์แวร์มากกว่า 10 คนตลอดช่วงอายุการใช้งานและไม่ได้เขียนในกรอบเวลาเดียวกัน ขึ้นอยู่กับห้องสมุดภายนอกมากกว่า 10 แห่งแต่ละแห่งมีคำเตือน งานซอฟต์แวร์ทั่วไป (สำหรับการสร้างผลลัพธ์ที่ผู้ใช้ต้องการ) ต้องใช้พารามิเตอร์อินพุต 10 ตัวขึ้นไปซึ่งส่วนใหญ่มีค่าเริ่มต้น แต่สามารถกำหนดค่าได้หากผู้ใช้ต้องการการควบคุม สิ่งสำคัญที่สุดคือซอฟแวร์ที่มีความซับซ้อนญาติที่เหมาะสมกับงานที่มีการดำเนินการคือไม่ซับซ้อนโดยไม่จำเป็น แก้ไข:อะไรซับซ้อน โปรดดูมีความแตกต่างใหญ่ระหว่างที่ซับซ้อนและมีความซับซ้อนเป็น (ลิงก์โดยตรง) คำจำกัดความของความซ้ำซ้อน / ความทนทาน ภายในคำถามนี้ : (เพิ่มความทนทานตามความคิดเห็น) หากงานซอฟต์แวร์ล้มเหลวเมื่อใช้ชุดพารามิเตอร์ปัจจุบันให้ลองใช้พารามิเตอร์อื่น เห็นได้ชัดว่าจะต้องมีความรู้ภายในว่าพารามิเตอร์ "แตกต่าง" เหล่านั้นใช้เส้นทางโค้ดที่แตกต่างกันซึ่งอาจส่งผลให้ผลลัพธ์ที่แตกต่างกัน บางครั้งพา ธ ของรหัสที่แตกต่างกันเหล่านี้จะถูกเลือกตามการสังเกตของไลบรารีภายนอก ในตอนท้ายถ้างานจริงที่ดำเนินการแตกต่างจากข้อกำหนดของผู้ใช้เล็กน้อยผู้ใช้จะได้รับรายงานรายละเอียดความคลาดเคลื่อน สุดท้ายเช่นเดียวกับพารามิเตอร์ที่กำหนดค่าได้ 10-plus ความซ้ำซ้อนและการรายงานก็สามารถกำหนดค่าได้เช่นกัน ตัวอย่างของซอฟต์แวร์ดังกล่าว: การย้ายฐานข้อมูล ฐานข้อมูลธุรกิจ ฐานข้อมูลการควบคุมแหล่งที่มา ฯลฯ รุ่นที่แปลงระหว่างเอกสาร …

3
ข้อยกเว้นหรือรหัสข้อผิดพลาด
เรากำลังสร้างบริการบนเว็บ (SOAP, .Net) ซึ่งจะพูดคุยกับลูกค้าพื้นเมือง (ส่วนใหญ่) (windows, C ++) และเราสงสัยว่าวิธีที่ดีที่สุดในการสื่อสารข้อผิดพลาดกับลูกค้าคืออะไรเช่น SomethingBadHappened เช่นบริการเข้าสู่ระบบไม่พร้อมใช้งาน หรือสิ่งที่ต้องการผู้ใช้ไม่พบ) และไม่สามารถตัดสินใจระหว่างการส่งข้อยกเว้นไปยังไคลเอนต์หรือใช้รูปแบบรหัสข้อผิดพลาดบางอย่างเพื่อทำดังกล่าว สิ่งที่คุณต้องการในการจัดการด้านลูกค้า: ได้รับรหัสข้อผิดพลาดหรือจัดการข้อยกเว้น ServerFault ซึ่งมีสาเหตุของข้อผิดพลาดหรือไม่ 1) เหตุใดเราจึงคิดยกเว้น: เพราะจะทำให้รหัสฝั่งเซิร์ฟเวอร์มีความสม่ำเสมอมากกว่า 2) เหตุใดเราจึงคิดรหัสข้อผิดพลาด: เพราะเราคิดว่ามันสมเหตุสมผลกว่าจากมุมมองฝั่งไคลเอ็นต์ หาก 2) เป็นจริงเราอาจต้องการรหัสข้อผิดพลาดมากกว่าข้อยกเว้น? เป็นกรณีนี้หรือไม่ นอกจากนี้คำตอบจะเปลี่ยนไปหรือไม่ถ้าเราคุยกับลูกค้าที่จัดการแทนที่จะเป็นลูกค้าพื้นเมือง

5
ทิ้งข้อยกเว้นรันไทม์ในแอปพลิเคชัน Java
ฉันทำงานเป็นผู้รับเหมาออกแบบองค์กร Java แอปพลิเคชันสำหรับลูกค้าของฉันในบทบาทของลูกค้าเป้าหมายทางเทคนิค แอปพลิเคชันจะถูกใช้โดยผู้ใช้ปลายทางและจะมีทีมสนับสนุนที่จะสนับสนุนแอปพลิเคชันเมื่อเราออกจาก โอกาสในการขายด้านเทคนิคอื่น ๆ ที่ฉันทำงานอยู่ภายใต้ความประทับใจที่การจัดการข้อยกเว้นจะทำให้โค้ดสกปรก ระบบควรโยนข้อยกเว้นที่ตรวจสอบจากระดับบริการและส่วนที่เหลือของรหัสควรโยนข้อยกเว้นรันไทม์จากระดับอื่น ๆ ทั้งหมดเพื่อให้ไม่จำเป็นต้องจัดการกับข้อยกเว้นที่ไม่ได้ตรวจสอบ จำเป็นต้องมีข้อยกเว้นที่ไม่ จำกัด ในแอปพลิเคชันธุรกิจอย่างไร จากประสบการณ์ของฉันในอดีตเกี่ยวกับข้อยกเว้นรันไทม์: 1) ข้อยกเว้นที่ไม่ได้ตรวจสอบทำให้โค้ดไม่สามารถคาดเดาได้เพราะจะไม่แสดงแม้แต่ใน Javadoc 2) การโยนข้อยกเว้นที่ไม่ได้ตรวจสอบในแอปพลิเคชันทางธุรกิจนั้นไม่มีความหมายเพราะเมื่อคุณโยนทิ้งและมันตรงไปที่ใบหน้าของผู้ใช้คุณจะอธิบายให้ผู้ใช้ทราบได้อย่างไร ฉันเคยเห็นเว็บแอปพลิเคชันเพียงพอซึ่งแสดง500 -Internal Error. Contact Administratorว่าไม่มีความหมายสำหรับผู้ใช้หรือทีมสนับสนุนที่จัดการแอปพลิเคชัน 3) การโยนข้อยกเว้นรันไทม์บังคับให้ผู้ใช้ของคลาสโยนข้อยกเว้นเพื่อเดินผ่านซอร์สโค้ดเพื่อตรวจแก้จุดบกพร่องและดูสาเหตุที่ข้อยกเว้นถูกโยน สิ่งนี้สามารถหลีกเลี่ยงได้หาก Javadoc ของข้อยกเว้นรันไทม์มีการบันทึกไว้อย่างดีเยี่ยมซึ่งฉันพบว่าไม่มีกรณี

5
วิธีการออกแบบข้อยกเว้น
ฉันกำลังดิ้นรนกับคำถามง่าย ๆ : ตอนนี้ฉันกำลังทำงานกับแอปพลิเคชันเซิร์ฟเวอร์และฉันต้องคิดค้นลำดับชั้นสำหรับข้อยกเว้น (มีข้อยกเว้นบางอย่างอยู่แล้ว แต่จำเป็นต้องใช้กรอบงานทั่วไป) ฉันจะเริ่มทำสิ่งนี้ได้อย่างไร ฉันกำลังคิดว่าจะทำตามกลยุทธ์นี้: 1) เกิดอะไรขึ้น? มีบางสิ่งถามซึ่งไม่ได้รับอนุญาต มีการถามอะไรบางอย่างอนุญาต แต่ไม่ทำงานเนื่องจากพารามิเตอร์ผิด มีการถามบางสิ่งอนุญาต แต่ไม่ทำงานเนื่องจากข้อผิดพลาดภายใน 2) ใครเป็นผู้เปิดตัวคำขอ? แอปพลิเคชันไคลเอนต์ แอปพลิเคชันเซิร์ฟเวอร์อื่น 3) การส่งข้อความ: เนื่องจากเรากำลังติดต่อกับแอปพลิเคชันเซิร์ฟเวอร์ทุกอย่างเกี่ยวกับการรับและส่งข้อความ แล้วถ้าเกิดว่าการส่งข้อความผิดพลาดล่ะ ดังนั้นเราอาจได้รับประเภทข้อยกเว้นดังต่อไปนี้: ServerNotAllowedException ClientNotAllowedException ServerParameterException ClientParameterException InternalException (ในกรณีที่เซิร์ฟเวอร์ไม่รู้ว่าคำขอมาจากไหน) ServerInternalException ClientInternalException MessageHandlingException นี่เป็นวิธีการทั่วไปในการกำหนดลำดับชั้นของข้อยกเว้น แต่ฉันกลัวว่าฉันอาจจะขาดบางกรณีที่ชัดเจน คุณมีความคิดเห็นเกี่ยวกับประเด็นที่ฉันไม่ครอบคลุมหรือไม่คุณทราบถึงข้อเสียของวิธีการนี้หรือมีวิธีการทั่วไปในการถามคำถามประเภทนี้ (ในกรณีหลังฉันจะหาได้ที่ไหน) ขอบคุณล่วงหน้า
11 design  c++  exceptions  stl 

1
เป็นการดีที่จะใช้ NoStackTrace ใน scala หรือไม่
ฉันเจอNoStackTraceมิกซ์อินสำหรับข้อยกเว้นในงานกาลา มันเป็นการปฏิบัติที่ดีที่จะใช้หรือควรพิจารณาว่า "ภายใน" เพื่อสกาล่าและทิ้งไว้ตามลำพัง?
11 exceptions  scala 

10
ข้อ จำกัด ด้านความปลอดภัยควรทำให้บริการส่งคืน null หรือมีข้อผิดพลาดหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังขัดแย้งกับนักพัฒนาที่มีประสบการณ์มากกว่าในเรื่องนี้และสงสัยว่าคนอื่นคิดอย่างไรกับมัน สภาพแวดล้อมของเราคือ Java, EJB 3, บริการและอื่น ๆ รหัสที่ฉันเขียนเรียกบริการเพื่อรับสิ่งของและสร้างสิ่งต่าง ๆ ปัญหาที่ฉันพบคือฉันได้รับข้อยกเว้นตัวชี้ null ซึ่งไม่สมเหตุสมผล ตัวอย่างเช่นเมื่อฉันขอให้บริการเพื่อสร้างวัตถุฉันได้รับกลับมาเป็นโมฆะ; เมื่อฉันพยายามค้นหาวัตถุที่มีรหัสที่ถูกต้องที่รู้จักฉันได้รับ null กลับ ฉันใช้เวลาพยายามหาสิ่งที่ผิดพลาดในรหัสของฉัน ตั้งแต่ฉันมีประสบการณ์น้อยฉันมักจะคิดว่าฉันทำอะไรผิด แต่กลับกลายเป็นว่าเหตุผลที่ผลตอบแทน Null คือความปลอดภัย หากผู้ใช้หลักที่ใช้บริการของฉันไม่ได้รับสิทธิ์ที่ถูกต้องสำหรับบริการเป้าหมายมันจะส่งคืนค่าว่าง บริการอื่น ๆ ส่วนใหญ่ที่นี่ไม่ได้รับการบันทึกไว้เป็นอย่างดีดังนั้นจึงเห็นได้ชัดว่านี่เป็นสิ่งที่คุณต้องรู้ สิ่งนี้ค่อนข้างสับสนในฐานะนักพัฒนาที่เขียนโค้ดที่โต้ตอบกับบริการ มันจะสมเหตุสมผลมากกว่าสำหรับฉันถ้าบริการนี้เป็นข้อยกเว้นที่จะบอกฉันว่าผู้ใช้ไม่มีสิทธิ์ที่เหมาะสมในการโหลดสิ่งนี้หรือเพื่อสร้างสิ่งนั้น ฉันจะทราบได้ทันทีว่าเหตุใดบริการของฉันจึงไม่ทำงานตามที่คาดไว้ นักพัฒนาที่มีประสบการณ์มากขึ้นซึ่งเขียนบริการแย้งว่าการขอข้อมูลไม่ใช่เงื่อนไขข้อผิดพลาดและข้อยกเว้นนั้นควรถูกส่งไปในเงื่อนไขข้อผิดพลาดเท่านั้นไม่ใช่เมื่อผู้ใช้ไม่สามารถเข้าถึงข้อมูลได้ ข้อมูลนี้มักจะถูกค้นหาใน GUI และสำหรับผู้ใช้ที่ไม่มีสิทธิ์ที่ถูกต้องสิ่งเหล่านี้ก็คือ "ไม่มีตัวตน" ดังนั้นในระยะสั้น: ถามไม่ผิดดังนั้นไม่มีข้อยกเว้น รับเมธอดส่งคืน null เนื่องจากสำหรับผู้ใช้เหล่านั้นสิ่งเหล่านั้น "ไม่มีอยู่" สร้างเมธอดส่งคืนค่าว่างเมื่อผู้ใช้ไม่ได้รับอนุญาตให้สร้างสิ่งนั้น นี่เป็นเรื่องปกติและ / หรือแนวปฏิบัติที่ดีหรือไม่? …

5
ไม่ใช่วิธีปฏิบัติที่ดีในการจัดการข้อยกเว้นรันไทม์ในรหัสหรือไม่
ฉันกำลังทำงานกับแอปพลิเคชัน Java และฉันเห็นว่ามีการจัดการข้อยกเว้นเวลาทำงานในหลาย ๆ ที่ ตัวอย่างเช่น, try { // do something } catch(NullPointerException e) { return null; } คำถามของฉันคือเมื่อใดที่ควรปฏิบัติกับข้อยกเว้นรันไทม์ เมื่อใดควรยกเว้นข้อยกเว้นที่ไม่ถูกจัดการ?
11 java  exceptions 

2
อะไรจะเป็นวิธีที่ดีที่สุดในการจัดการข้อผิดพลาดในโปรแกรมแบบขนาน?
ด้วยอัลกอริทึมแบบขนานที่เคาะประตูมันอาจเป็นเวลาที่ดีที่จะคิดเกี่ยวกับการจัดการข้อผิดพลาด ดังนั้นในตอนแรกจึงมีรหัสข้อผิดพลาด เหล่านั้นดูด มีอิสระที่จะเพิกเฉยต่อพวกเขาดังนั้นคุณอาจล้มเหลวช้าและสร้างรหัสที่ยากต่อการดีบัก จากนั้นก็มีข้อยกเว้น สิ่งเหล่านี้ทำให้ไม่สามารถเพิกเฉยได้เมื่อเกิดขึ้นและคนส่วนใหญ่ (ยกเว้น Joel) ชอบพวกเขาดีกว่า และตอนนี้เรามีห้องสมุดที่ช่วยให้โค้ดคู่ขนาน ปัญหาคือคุณไม่สามารถจัดการกับข้อยกเว้นในรหัสขนานได้อย่างง่ายดายเท่าที่จะทำได้กับรหัสที่ไม่ขนานกัน หากคุณเริ่มงานแบบอะซิงโครนัสและส่งข้อยกเว้นจะไม่มีการติดตามสแต็กที่ผ่านมาเพื่อคลายออก ดีที่สุดที่คุณสามารถทำได้คือจับมันและลงทะเบียนบนวัตถุงานหากมีวัตถุดังกล่าว อย่างไรก็ตามมันจะเอาชนะจุดแข็งหลักของข้อยกเว้น: คุณต้องตรวจสอบพวกมันและคุณสามารถเพิกเฉยได้โดยไม่ต้องใช้ความพยายามเพิ่มเติมในขณะที่โค้ดแบบเธรดเดียวข้อยกเว้นจะทำให้เกิดการกระทำที่เหมาะสม การใช้ภาษาหรือไลบรารีควรสนับสนุนข้อผิดพลาดในรหัสคู่ขนานอย่างไร

3
เป็นวิธีปฏิบัติที่ดีในการใช้คำเตือนในรหัสของคุณหรือไม่?
ฉันใช้@SuppressWarnings("unchecked")และ@SuppressWarnings("null")ส่วนใหญ่วิธีการข้างต้นเพื่อให้รหัสรวบรวมโดยไม่มีคำเตือนใด ๆ แต่ฉันมีข้อสงสัยของฉัน พบคำถาม Stackoverflow นี้ Jon Skeet เขียนคำตอบที่ฉันพบว่าน่าสนใจ ตามที่เขาพูด บางครั้ง generics Java ก็ไม่ยอมให้คุณทำสิ่งที่คุณต้องการและคุณต้องบอกคอมไพเลอร์อย่างมีประสิทธิภาพว่าสิ่งที่คุณทำจริงๆจะถูกกฎหมายในเวลาดำเนินการ แต่ถ้ามีโอกาสที่ข้อยกเว้นจะถูกโยนทิ้งไปล่ะ? การระงับคำเตือนเป็นความคิดที่ไม่ดีใช่ไหม ฉันไม่ควรทราบเกี่ยวกับสถานที่ซึ่งปัญหาอาจปรากฏหรือไม่ นอกจากนี้จะเกิดอะไรขึ้นถ้ามีคนอื่นแก้ไขโค้ดของฉันในภายหลังและเพิ่มฟังก์ชันการทำงานที่น่าสงสัยโดยไม่ลบ SuppressWarnings จะสามารถหลีกเลี่ยงและ / หรือมีทางเลือกอื่นในการนี้ได้อย่างไร? ฉันควรจะใช้@SuppressWarnings("unchecked")และ@SuppressWarnings("null")? อัปเดต # 1 เท่าที่ประเภทที่ไม่ได้เลือกได้ปลดเปลื้องไปตามคำตอบนี้(ชี้ให้เห็นโดย @gnat ในความคิดเห็นด้านล่าง) การปราบปรามคำเตือนเหล่านี้เป็นสิ่งที่จำเป็น ห้องสมุด Java ที่ขาดไม่ได้หลายแห่งไม่เคยมีการอัพเดทเพื่อกำจัดความต้องการ typecasts ที่ไม่ปลอดภัย การระงับคำเตือนเหล่านั้นเป็นสิ่งที่จำเป็นเพื่อให้คำเตือนที่สำคัญอื่น ๆ จะได้รับการสังเกตและแก้ไข ในกรณีที่มีการระงับคำเตือนอื่น ๆ ยังคงอยู่ในพื้นที่สีเทาเล็กน้อย อัปเดต # 2 ตามเอกสาร Oracle (กล่าวถึงบางคำตอบด้านล่าง): โปรแกรมเมอร์ควรใช้คำอธิบายประกอบนี้กับองค์ประกอบที่ซ้อนกันมากที่สุดซึ่งมีประสิทธิภาพ หากคุณต้องการระงับคำเตือนในวิธีใดวิธีหนึ่งคุณควรใส่คำอธิบายประกอบวิธีนั้นแทนการเรียน

2
เหตุใดจึงมีการตรวจสอบกับข้อยกเว้นที่ไม่ได้ตรวจสอบซึ่งเรียกว่า“ การโต้เถียง” ในบทช่วยสอนของ Oracle Java
ฉันยังใหม่กับ Java และได้อ่านเอกสารเกี่ยวกับข้อยกเว้น และโดยเฉพาะอย่างยิ่งข้อยกเว้นที่ไม่ได้ตรวจสอบ -หน้าการโต้เถียง บรรทัดล่างพูดว่า: หากลูกค้าสามารถคาดว่าจะกู้คืนจากข้อยกเว้นให้มันเป็นข้อยกเว้นที่ตรวจสอบ หากลูกค้าไม่สามารถทำอะไรเพื่อกู้คืนจากข้อยกเว้นให้เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ ฉันไม่เข้าใจบทความ “ การโต้เถียง” คืออะไรเกี่ยวกับ? คุณอธิบายมันด้วยคำง่าย ๆ ได้ไหม?

1
ฉันควร subclass ข้อยกเว้นใน Python เมื่อใด
ในรหัสของฉันมีประมาณเจ็ดแห่งที่ฉันแจ้งข้อยกเว้น ข้อยกเว้นเหล่านี้ทั้งหมดจะได้รับการปฏิบัติเช่นเดียวกัน: พิมพ์ข้อผิดพลาดไปยังล็อกไฟล์คืนสถานะซอฟต์แวร์กลับเป็นค่าเริ่มต้นและออก ในระหว่างการตรวจสอบรหัสวิศวกรอาวุโสของฉันซึ่งฉันให้ความสำคัญมากบอกว่าฉันควรคลาสย่อยทั้งหมดยกเว้น เหตุผลของเขาคือในอนาคตเราอาจต้องการจัดการกับข้อยกเว้นต่างกันและจะง่ายขึ้น ข้อโต้แย้งของฉันคือตอนนี้มันจะถ่วงโค้ดของเราเท่านั้นและเนื่องจากเราไม่รู้ว่าเราจะจัดการกับข้อยกเว้นต่างกันหรือไม่เราควรปล่อยให้รหัสย่อและถ้าเมื่อเวลามาแล้วเราควรจะพิมพ์ย่อย . ฉันต้องการฟังอาร์กิวเมนต์สำหรับแต่ละกรณี

2
JVM จัดการข้อยกเว้นที่เกิดจากวิธีหลักอย่างไร
ฉันเข้าใจข้อยกเว้นขว้างพวกมันจัดการพวกมันและแพร่กระจายมันไปยังวิธีที่ต่ำกว่าใน call stack (เช่นthrows) สิ่งที่ฉันไม่เข้าใจคือ: public static void main(String[] args) throws Exception { ... } ตอนนี้ฉันคิดว่าในกรณีที่mainมีการโยนExceptionJVM จัดการ (ถูกต้อง?) หากเป็นเช่นนั้นคำถามของฉันคือ: JVM จัดการข้อยกเว้นที่ส่งออกมาmainอย่างไร มันทำอะไร?
10 java  exceptions  jvm 

5
ข้อยกเว้นเป็นการยืนยันหรือเป็นข้อผิดพลาด?
ฉันเป็นโปรแกรมเมอร์ C มืออาชีพและเป็นนักเขียน Obj-C โปรแกรมเมอร์ (OS X) เมื่อเร็ว ๆ นี้ฉันถูกล่อลวงให้ขยายไปสู่ ​​C ++ เนื่องจากมีไวยากรณ์ที่หลากหลายมาก จนถึงตอนนี้ฉันไม่ได้จัดการกับข้อยกเว้นมากนัก Objective-C มี แต่นโยบายของ Apple ค่อนข้างเข้มงวด: สิ่งสำคัญคุณควรสำรองการใช้ข้อยกเว้นสำหรับการเขียนโปรแกรมหรือข้อผิดพลาดรันไทม์ที่ไม่คาดคิดเช่นการเข้าถึงคอลเลกชันที่ไม่อยู่ในขอบเขตพยายามที่จะกลายพันธุ์วัตถุที่ไม่เปลี่ยนรูปได้ส่งข้อความไม่ถูกต้องและสูญเสียการเชื่อมต่อกับเซิร์ฟเวอร์หน้าต่าง C ++ ดูเหมือนจะชอบการใช้ข้อยกเว้นบ่อยกว่า ตัวอย่างเช่นตัวอย่างวิกิพีเดียในRAIIส่งข้อยกเว้นหากไม่สามารถเปิดไฟล์ได้ Object--C จะreturn nilมีข้อผิดพลาดที่ส่งโดยพารามิเตอร์ออก โดยเฉพาะอย่างยิ่งดูเหมือนว่า std :: ofstream สามารถตั้งค่าได้ทั้งสองทาง ที่นี่ในโปรแกรมเมอร์ฉันพบคำตอบหลายข้อทั้งการประกาศให้ใช้ข้อยกเว้นแทนรหัสข้อผิดพลาดหรือไม่ใช้ข้อยกเว้นเลย อดีตดูเหมือนแพร่หลายมากขึ้น ฉันไม่พบใครที่กำลังทำการศึกษาอย่างมีจุดประสงค์สำหรับ C ++ สำหรับฉันแล้วดูเหมือนว่าเนื่องจากพอยน์เตอร์หายากฉันจะต้องดำเนินการกับข้อผิดพลาดภายในหากฉันเลือกที่จะหลีกเลี่ยงข้อยกเว้น มันจะลำบากเกินกว่าจะจัดการหรืออาจจะทำงานได้ดีกว่าข้อยกเว้น? การเปรียบเทียบทั้งสองกรณีจะเป็นคำตอบที่ดีที่สุด แก้ไข: แม้ว่าจะไม่เกี่ยวข้องกันโดยสมบูรณ์ แต่ฉันก็ควรจะอธิบายให้ชัดเจนว่าอะไรnilคือสิ่งที่ ทางเทคนิคแล้วมันเหมือนกับแต่สิ่งที่เป็นก็ตกลงที่จะส่งข้อความไปยังNULL nilดังนั้นคุณสามารถทำสิ่งที่ชอบ NSError *err = nil; id …
10 c++  exceptions 

5
การขว้างและจับข้อยกเว้นในฟังก์ชั่น / วิธีการเดียวกัน
ฉันได้เขียนฟังก์ชันที่ขอให้ผู้ใช้ป้อนข้อมูลจนกว่าผู้ใช้จะป้อนจำนวนเต็มบวก (จำนวนธรรมชาติ) ใครบางคนบอกว่าฉันไม่ควรโยนและจับข้อยกเว้นในฟังก์ชั่นของฉันและควรให้ผู้โทรของฟังก์ชั่นของฉันจัดการกับพวกเขา ฉันสงสัยว่านักพัฒนาคนอื่นคิดอย่างไรกับเรื่องนี้ ฉันอาจใช้ข้อยกเว้นในทางที่ผิดในฟังก์ชั่น นี่คือรหัสใน Java: private static int sideInput() { int side = 0; String input; Scanner scanner = new Scanner(System.in); do { System.out.print("Side length: "); input = scanner.nextLine(); try { side = Integer.parseInt(input); if (side <= 0) { // probably a misuse of exceptions throw new NumberFormatException(); …
10 exceptions 

5
การตรวจสอบ vs ไม่ได้ตรวจสอบ vs ไม่มีข้อยกเว้น ... แนวปฏิบัติที่ดีที่สุดของความเชื่อที่ตรงกันข้าม
มีข้อกำหนดมากมายที่จำเป็นสำหรับระบบในการถ่ายทอดและจัดการข้อยกเว้นอย่างเหมาะสม นอกจากนี้ยังมีตัวเลือกมากมายสำหรับภาษาที่เลือกจากการนำแนวคิดไปใช้ ข้อกำหนดสำหรับการยกเว้น (ตามลำดับโดยเฉพาะ): เอกสาร : ภาษาควรมีค่าเฉลี่ยในการยกเว้นเอกสารที่ API สามารถใช้งานได้ โดยทั่วไปแล้วสื่อเอกสารนี้ควรใช้กับเครื่องเพื่อให้คอมไพเลอร์และ IDE สามารถให้การสนับสนุนแก่โปรแกรมเมอร์ ส่งสถานการณ์พิเศษ : อันนี้ชัดเจนเพื่อให้ฟังก์ชั่นในการถ่ายทอดสถานการณ์ที่ป้องกันไม่ให้การทำงานที่เรียกว่าดำเนินการตามที่คาดไว้ ในความคิดของฉันมีสามประเภทใหญ่ของสถานการณ์เช่นนี้: 2.1 ข้อบกพร่องในรหัสที่ทำให้ข้อมูลบางอย่างไม่ถูกต้อง 2.2 ปัญหาในการกำหนดค่าหรือทรัพยากรภายนอกอื่น ๆ 2.3 ทรัพยากรที่ไม่น่าเชื่อถืออย่างแท้จริง (เครือข่ายระบบไฟล์ฐานข้อมูลผู้ใช้ปลายทางเป็นต้น) สิ่งเหล่านี้เป็นเรื่องเล็ก ๆ น้อย ๆ เนื่องจากลักษณะที่ไม่น่าเชื่อถือของพวกเขาควรให้เราคาดหวังความล้มเหลวเป็นระยะ ๆ ในกรณีนี้สถานการณ์เหล่านี้จะถือว่ายอดเยี่ยมหรือไม่ ให้ข้อมูลที่เพียงพอสำหรับรหัสในการจัดการ : ข้อยกเว้นควรให้ข้อมูลที่เพียงพอแก่ผู้ใช้เพื่อให้สามารถตอบสนองและจัดการกับสถานการณ์ได้ ข้อมูลควรเพียงพอเช่นกันเมื่อบันทึกข้อยกเว้นนี้จะให้บริบทที่เพียงพอแก่โปรแกรมเมอร์เพื่อระบุและแยกคำแถลงที่กระทำผิดและจัดหาวิธีแก้ปัญหา ให้ความมั่นใจแก่โปรแกรมเมอร์เกี่ยวกับสถานะปัจจุบันของสถานะการเรียกใช้รหัสของเขา : ความสามารถในการจัดการข้อยกเว้นของระบบซอฟต์แวร์ควรมีเพียงพอที่จะให้การป้องกันที่จำเป็นขณะที่อยู่ห่างจากโปรแกรมเมอร์เพื่อให้เขาสามารถจดจ่อกับงานที่ มือ. เพื่อให้ครอบคลุมถึงวิธีการต่อไปนี้ถูกนำไปใช้ในภาษาต่างๆ: ข้อยกเว้นที่ตรวจสอบ มีวิธีที่ดีในการจัดทำเอกสารข้อยกเว้นและในทางทฤษฎีเมื่อดำเนินการอย่างถูกต้องควรให้ความมั่นใจอย่างเพียงพอว่าทุกอย่างดี อย่างไรก็ตามค่าใช้จ่ายดังกล่าวทำให้หลายคนรู้สึกว่ามีประสิทธิผลมากกว่าที่จะหลีกเลี่ยงโดยการกลืนข้อยกเว้นหรือโยนทิ้งเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบอีกครั้ง เมื่อใช้ข้อยกเว้นที่ตรวจสอบอย่างไม่เหมาะสมก็จะมีประโยชน์ นอกจากนี้การตรวจสอบข้อยกเว้นทำให้ยากในการสร้าง API ที่เสถียรในเวลา การใช้งานระบบทั่วไปภายในโดเมนที่เฉพาะเจาะจงจะทำให้เกิดสถานการณ์ที่ไม่ธรรมดาซึ่งยากต่อการบำรุงรักษาโดยใช้ข้อยกเว้นที่ตรวจสอบ แต่เพียงผู้เดียว ข้อยกเว้นที่ไม่ได้ตรวจสอบ …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.