Zig Academy · บทเรียน

ห่อและส่งข้อผิดพลาดต่อ

เพิ่มบริบทขณะที่ข้อผิดพลาดส่งต่อขึ้นไป

บทเรียน 4 จาก 413 ขั้นตอน

ห่อและส่งข้อผิดพลาดต่อ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

ข้อผิดพลาดเดินทางขึ้นไป

เมื่อฟังก์ชันไม่สามารถจัดการความล้มเหลวด้วยตนเองได้ ฟังก์ชันจะส่งข้อผิดพลาดไปยังผู้เรียก ระหว่างทางคุณสามารถปรับเปลี่ยนหรือ ส่งข้อผิดพลาดซ้ำ ได้

ส่งข้อผิดพลาดซ้ำด้วย try

วิธีส่งข้อผิดพลาดซ้ำที่ง่ายที่สุดคือ try มันส่งต่อข้อผิดพลาดเดิมไปยังผู้เรียกโดยไม่เปลี่ยนแปลง ดังนั้นค่าเดิมจึงถูกส่งต่อขึ้นไปเรื่อย ๆ

const data = try readFile(path);

จับแล้วส่งคืน

หากต้องการแปลงข้อผิดพลาด ให้ใช้ catch แล้วส่งคืนข้อผิดพลาดอื่น วิธีนี้จะแทนที่ข้อผิดพลาดระดับล่างด้วยข้อผิดพลาดที่เหมาะกับส่วนติดต่อของคุณ

const f = open(path) catch return error.ConfigMissing;

แมปข้อผิดพลาดด้วย switch

ใช้ catch ร่วมกับ switch เพื่อแปลงข้อผิดพลาดต้นทางแต่ละรายการให้เป็นข้อผิดพลาดที่เข้าใจได้ชัดเจนขึ้น พร้อมส่งต่อรายการที่เหลือโดยไม่เปลี่ยนแปลง

parse(s) catch |e| switch (e) {
    error.Empty => return error.NoInput,
    else => return e,
};

Zig ไม่มีร่องรอยการเรียกซ้อนเป็นค่า

ข้อผิดพลาดใน Zig เป็นเพียงแท็ก ไม่ใช่ออบเจ็กต์ที่เก็บบริบท หากต้องการเพิ่มรายละเอียด คุณต้องส่งคืนข้อผิดพลาดของคุณเองที่ สื่อความหมายได้ชัดเจนกว่า

แนบบริบทแยกต่างหาก

เนื่องจากแท็กข้อผิดพลาดไม่มีข้อความ ให้ บันทึก รายละเอียดไว้ตรงจุดที่เกิดความล้มเหลว แล้วส่งคืนข้อผิดพลาดระดับสูงให้ผู้เรียก

open(path) catch |e| {
    std.log.err("open {s}: {}", .{ path, e });
    return error.LoadFailed;
};

ขยายชุดข้อผิดพลาด

หากคุณส่งคืนข้อผิดพลาดใหม่ ชุดข้อผิดพลาด ของฟังก์ชันต้องมีข้อผิดพลาดนั้นอยู่ด้วย ชุด !T ที่อนุมานจะขยายให้ครอบคลุมทุกสิ่งที่คุณส่งคืน

fn load() !Config {
    return open(".cfg") catch error.LoadFailed;
}

เก็บไว้หรือแทนที่

ตัดสินใจในแต่ละชั้น: ส่งต่อข้อผิดพลาดเดิมทุกประการด้วย try หรือแทนที่ด้วยข้อผิดพลาดที่เหมาะกับผู้เรียกมากกว่า ทั้งสองวิธีใช้ได้

รักษาขอบเขตให้สะอาด

ที่ขอบเขตของโมดูล ให้แปลงข้อผิดพลาดภายในเป็น ชุด สาธารณะขนาดเล็ก จากนั้นผู้เรียกจะพึ่งพาชื่อที่คงที่ ไม่ใช่รายละเอียดภายในของคุณ

ใช้คู่กับ errdefer

เมื่อคุณส่งข้อผิดพลาดซ้ำ errdefer ใด ๆ ที่อยู่ในขอบเขตนั้นจะยังทำงานก่อน ดังนั้นคุณจึงย้อนคืนทรัพยากรและแปลงข้อผิดพลาดได้ในเส้นทางเดียว

ความล้มเหลวที่มีความหมาย

การห่อหุ้มข้อผิดพลาดเปลี่ยนสาเหตุดิบให้เป็นข้อความที่เหมาะกับโดเมนของคุณ ผู้เรียกจะเห็น ข้อผิดพลาด ที่ชัดเจนแทนรายละเอียดภายใน

ตรวจสอบอย่างรวดเร็ว

คุณต้องการแทนที่ error.NotFound ระดับล่างด้วย error.ConfigMissing ของคุณเองสำหรับผู้เรียก วิธีใดใช้ได้

สรุป

คุณส่งข้อผิดพลาดซ้ำด้วย try แปลงข้อผิดพลาดผ่าน catch และ switch บันทึกบริบท และขยายชุดข้อผิดพลาดเพื่อให้ความล้มเหลวยังคงมีความหมาย ✅

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “ห่อและส่งข้อผิดพลาดต่อ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ห่อและส่งข้อผิดพลาดต่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ห่อและส่งข้อผิดพลาดต่อ”

เพิ่มบริบทขณะที่ข้อผิดพลาดส่งต่อขึ้นไป คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ห่อและส่งข้อผิดพลาดต่อ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. กู้คืนด้วย catch
  2. เลือกตามข้อผิดพลาดเฉพาะ
  3. errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว
  4. ห่อและส่งข้อผิดพลาดต่อ
← กลับไปที่ Zig Academy