จับคู่ Open กับ Close
จัดสรรและคืนทรัพยากรอย่างสมมาตร
จับคู่ Open กับ Close เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทุกการเปิดต้องมีการปิด
ทรัพยากรมักมาเป็นคู่: open และ close, alloc และ free, lock และ unlock ทักษะสำคัญคือการรักษาให้แต่ละคู่ สมดุล
จับคู่กันทันที
แนวปฏิบัติของ Zig คือเขียน close ทันทีหลัง open โดยใช้ defer เพื่อไม่ให้คู่ดังกล่าวแยกจากกัน
const f = try open();
defer f.close();จัดสรรแล้ว defer free
จังหวะเดียวกันนี้ใช้กับหน่วยความจำได้เช่นกัน ทันทีหลังจาก จัดสรรแล้ว ให้กำหนดเวลา free เพื่อให้บัฟเฟอร์ถูกปล่อยเมื่อออกจาก scope
const buf = try a.alloc(u8, 64);
defer a.free(buf);ล็อกต้องถูกปลดล็อก
มิวเทกซ์ก็ใช้หลักการเดียวกัน ขอใช้ lock แล้ว defer unlock เพื่อให้ล็อกถูกปล่อยเสมอ แม้คุณจะ return ก่อนกำหนด
mutex.lock();
defer mutex.unlock();รูปแบบนี้ขยายได้
เมื่อเปิดหลายสิ่ง แต่ละสิ่งจะมี defer ของตัวเอง ลำดับย้อนกลับจะทำให้สิ่งเหล่านั้น close ตามลำดับที่ถูกต้องโดยอัตโนมัติ
ปกป้องค่าที่จะคืน
เมื่อฟังก์ชันสร้างและคืนทรัพยากร ให้ใช้ errdefer สำหรับ free เพื่อให้ทรัพยากรคงอยู่เมื่อสำเร็จ แต่ถูกเก็บกวาดเมื่อเกิดข้อผิดพลาด
const node = try a.create(Node);
errdefer a.destroy(node);ไม่มีทรัพยากรที่ถูกทอดทิ้ง
เมื่อ close อยู่คู่กับ open การปรับโครงสร้างโค้ดหรือเพิ่มแขนงจะไม่ทิ้งทรัพยากรไว้โดย ไม่มีเจ้าของและปล่อยให้รั่วไหล
ตรวจสอบได้ง่าย
ผู้ตรวจสอบสามารถไล่ดู open แต่ละรายการและเห็น defer ที่จับคู่กันได้ทันที การขาดการเก็บกวาดจึง เห็นได้ชัดในพริบตา
เป้าหมายคือความสมมาตร
คิดถึง ความสมมาตร: ทุกบรรทัดที่ขอใช้ทรัพยากรมีบรรทัดที่ปล่อยทรัพยากรอยู่ใกล้กัน และ defer ช่วยให้ทั้งสองทำงานสอดคล้องกัน
สูตรที่นำกลับมาใช้ได้
ขอใช้ทรัพยากร จากนั้น defer การปล่อยทรัพยากร แล้วจึงใช้งาน สูตรสามขั้นตอนนี้ครอบคลุมไฟล์ หน่วยความจำ ล็อก และทรัพยากรแทบทุกชนิดที่คุณพบ
มั่นใจได้แม้อยู่ภายใต้แรงกดดัน
เมื่อจับคู่การขอใช้กับการปล่อยทรัพยากรแล้ว คุณสามารถเพิ่มการคืนค่าก่อนกำหนดและการจัดการข้อผิดพลาดได้อย่างอิสระ โดยไว้วางใจว่าการเก็บกวาดจะยังคง ถูกต้อง
ตรวจสอบความเข้าใจ
โดยทั่วไปควรวาง close ที่จับคู่กันไว้ตรงไหน
สรุปทบทวน
จับคู่ open ทุกตัวกับ defer close ในบรรทัดถัดไป ความสมมาตรนี้ทำให้ไฟล์ หน่วยความจำ และล็อก สมดุลในทุกเส้นทาง 🔐
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “จับคู่ Open กับ Close” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จับคู่ Open กับ Close” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จับคู่ Open กับ Close”
จัดสรรและคืนทรัพยากรอย่างสมมาตร คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “จับคู่ Open กับ Close” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สิ่งที่ defer รับประกัน
- ลำดับการทำงานของ defer หลายรายการ
- defer เทียบกับ errdefer ในทางปฏิบัติ
- จับคู่ Open กับ Close