ข้อยกเว้นแบบกำหนดเองและ rethrow
กำหนดข้อผิดพลาดที่มีความหมายและส่งต่ออีกครั้ง
ข้อยกเว้นแบบกำหนดเองและ rethrow เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อผิดพลาดที่สื่อความหมาย
ข้อยกเว้นทั่วไปมักซ่อนเจตนาไว้ ส่วน ข้อยกเว้นกำหนดเอง จะระบุปัญหาที่เกิดขึ้นอย่างชัดเจน ทำให้ความล้มเหลวอ่านเข้าใจได้ทั่วทั้งแอปของคุณ 🏷️
การสร้างข้อยกเว้น
สร้างคลาสที่ implements Exception การทำเช่นนี้จะระบุว่าคลาสดังกล่าวเป็นชนิดข้อผิดพลาดที่สามารถโยนได้ ซึ่ง Dart และผู้อ่านจะเข้าใจได้ทันที
class PaymentException implements Exception {}การเก็บข้อความ
เพิ่มฟิลด์ ข้อความ ให้ข้อยกเว้นผ่านตัวสร้าง เพื่อให้ตัวจัดการอ่านได้ว่าเหตุใดจึงเกิดเหตุการณ์นี้ขึ้น
class PaymentException implements Exception {
final String message;
PaymentException(this.message);
}toString ที่อ่านเข้าใจง่าย
เขียนทับ toString เพื่อให้เมื่อพิมพ์ข้อยกเว้น จะแสดงประโยคที่ชัดเจนแทนที่จะแสดงเพียงชื่อคลาส
@override
String toString() => 'PaymentException: $message';โยนข้อยกเว้นของคุณเอง
โยนข้อยกเว้นกำหนดเองได้เช่นเดียวกับข้อยกเว้นในตัว ใช้ throw กับอินสแตนซ์ใหม่เมื่อกฎถูกละเมิด
throw PaymentException('Card declined');ดักจับตามชนิดของคุณ
ดักจับข้อยกเว้นของคุณด้วยอนุประโยค on เช่นเดียวกับชนิดที่มีมาให้ เพื่อจัดการกรณีนี้โดยเฉพาะ
try {
pay();
} on PaymentException catch (e) {
print(e);
}บางครั้งคุณแก้ไขไม่ได้
ตัวจัดการอาจบันทึกข้อผิดพลาดไว้ แต่ไม่สามารถแก้ไขปัญหาได้ แทนที่จะกลืนข้อผิดพลาด คุณสามารถส่งต่อขึ้นไปด้วย rethrow
คีย์เวิร์ด rethrow
rethrow จะโยนข้อยกเว้นปัจจุบันซ้ำอีกครั้ง โดยคงร่องรอยสแต็กเดิมไว้ ทำให้ผู้เรียกเห็นว่าข้อยกเว้นเริ่มต้นขึ้นจริงที่ใด
catch (e) {
log(e);
rethrow;
}rethrow ดีกว่า throw e
การเขียน throw e จะรีเซ็ตร่องรอยสแต็ก แต่ rethrow จะคงร่องรอยเดิมไว้ โปรดเลือกใช้ rethrow เสมอเมื่อต้องโยนข้อยกเว้นซ้ำภายใน catch
บันทึกแล้วส่งต่อขึ้นไป
รูปแบบที่ใช้บ่อยคือ ดักจับเพื่อ บันทึก ความล้มเหลว แล้วใช้ rethrow เพื่อให้ชั้นที่สูงกว่าตัดสินใจว่าจะกู้คืนอย่างไร
catch (e) {
logger.error(e);
rethrow;
}เพิ่มฟิลด์ที่มีประโยชน์
ข้อยกเว้นกำหนดเองสามารถเก็บข้อมูลเพิ่มเติม เช่น รหัส หรือค่าที่ทำให้ล้มเหลว เพื่อให้ตัวจัดการมีบริบทที่ละเอียดขึ้นสำหรับดำเนินการ
class ApiException implements Exception {
final int code;
ApiException(this.code);
}ตรวจสอบอย่างรวดเร็ว
เหตุใดจึงใช้ rethrow แทน throw e ภายใน catch
สรุปทบทวน
ตอนนี้คุณสามารถสร้างข้อยกเว้นที่มีความหมาย ซึ่ง implements Exception เก็บข้อมูล และใช้ rethrow เพื่อส่งต่อความล้มเหลวขึ้นไปได้อย่างเป็นระเบียบ 🚀
คำถามที่พบบ่อย
บทเรียน “ข้อยกเว้นแบบกำหนดเองและ rethrow” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อยกเว้นแบบกำหนดเองและ rethrow” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อยกเว้นแบบกำหนดเองและ rethrow”
กำหนดข้อผิดพลาดที่มีความหมายและส่งต่ออีกครั้ง คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ข้อยกเว้นแบบกำหนดเองและ rethrow” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม
ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- throw, try และ catch
- ข้อกำหนด on และชนิดข้อยกเว้น
- finally และการล้างข้อมูลที่รับประกัน
- ข้อยกเว้นแบบกำหนดเองและ rethrow