สิ่งที่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สิ่งที่ defer รับประกัน
- ลำดับการทำงานของ defer หลายรายการ
- defer เทียบกับ errdefer ในทางปฏิบัติ
- จับคู่ Open กับ Close