0Pricing
Dart Academy · บทเรียน

ข้อยกเว้นแบบกำหนดเองและ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. throw, try และ catch
  2. ข้อกำหนด on และชนิดข้อยกเว้น
  3. finally และการล้างข้อมูลที่รับประกัน
  4. ข้อยกเว้นแบบกำหนดเองและ rethrow
← กลับไปที่ Dart Academy