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

สิ่งที่ defer รับประกัน

เรียกใช้โค้ดเมื่อขอบเขตสิ้นสุด

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

การเก็บกวาดที่ไว้วางใจได้

โปรแกรมเกือบทุกโปรแกรมเปิดบางสิ่งที่ต้องปิดในภายหลัง Zig จึงมี defer เพื่อไม่ให้ลืมการเก็บกวาด

defer ทำอะไร

คำสั่ง defer จะกำหนดให้โค้ดส่วนหนึ่งทำงานเมื่อ scope ที่ครอบอยู่สิ้นสุดลง ไม่ว่าจะสิ้นสุดด้วยวิธีใด

defer cleanup();

เขียนการเก็บกวาดทันที

แนวคิดสำคัญคือ วางบรรทัดเก็บกวาดไว้ ถัดจาก บรรทัดที่ขอใช้ทรัพยากร เพื่อไม่ให้ทั้งสองบรรทัดแยกจากกัน

const file = try open();
defer file.close();

ทำงานเมื่อออกจาก Scope

โค้ดที่เลื่อนการทำงานไว้จะไม่ทำงานทันที แต่จะรอจนกว่า scope ที่โค้ดนั้นอยู่จะเสร็จสิ้น แล้วจึงทำงาน

{
    defer cleanup();
    work();
}

ทำงานบนทุกเส้นทางการออก

ไม่ว่า scope จะสิ้นสุดตามปกติ หรือคุณจะ return ก่อนจากตรงกลาง โค้ดที่เลื่อนการทำงานไว้ก็ยังทำงาน ไม่มีทางหลบเลี่ยงได้

defer file.close();
if (bad) return error.Oops;

ข้อผิดพลาดก็ไม่ทำให้ข้ามไป

แม้ว่า try ที่อยู่ภายหลังในฟังก์ชันจะคืนค่าข้อผิดพลาด defer ของคุณก็ถูกกำหนดไว้แล้ว และจะทำงานระหว่างออกจากฟังก์ชัน

รองรับทุกคำสั่ง ไม่ใช่แค่การเรียก

defer สามารถเก็บคำสั่งเดี่ยวใดก็ได้ รวมถึง บล็อก ทำให้คุณรวมขั้นตอนการเก็บกวาดหลายขั้นตอนไว้ด้วยกันได้

defer {
    free(buf);
    log("done");
}

Scope ที่อยู่นอกฟังก์ชัน

defer ผูกอยู่กับ scope ที่ครอบมันไว้ ซึ่งอาจเป็นเนื้อความของลูปหรือบล็อก if ไม่จำเป็นต้องเป็นทั้งฟังก์ชัน

while (more()) {
    defer step();
}

ไม่ต้องติดตามด้วยตนเอง

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

อ่านจากบนลงล่าง

เมื่อการขอใช้ทรัพยากรกับการเก็บกวาดอยู่ติดกัน โค้ดจะอ่านเป็นเรื่องราวที่ชัดเจน: open ใช้งาน และการ close ก็ถูกสัญญาไว้แล้ว

เครื่องมือหลักด้านความปลอดภัยของทรัพยากร

ตั้งแต่ไฟล์ไปจนถึงการจองหน่วยความจำและล็อก defer คือเครื่องมือที่ใช้เป็นประจำเพื่อให้โปรแกรม Zig ไม่มีทรัพยากรรั่วไหลและเป็นระเบียบ

ตรวจสอบความเข้าใจ

คำสั่งที่เลื่อนการทำงานไว้จะทำงานจริงเมื่อใด

สรุปทบทวน

คุณได้รู้จัก defer: เขียนการเก็บกวาดไว้ข้างการขอใช้ทรัพยากร แล้ว Zig จะรับรองว่าการเก็บกวาดทำงานเมื่อออกจาก scope ในทุกเส้นทาง 🧹

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

บทเรียน “สิ่งที่ defer รับประกัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “สิ่งที่ defer รับประกัน”

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

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

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

บทเรียน “สิ่งที่ defer รับประกัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สิ่งที่ defer รับประกัน
  2. ลำดับการทำงานของ defer หลายรายการ
  3. defer เทียบกับ errdefer ในทางปฏิบัติ
  4. จับคู่ Open กับ Close
← กลับไปที่ Zig Academy