Zig Academy · บทเรียน

จับคู่ Open กับ Close

จัดสรรและคืนทรัพยากรอย่างสมมาตร

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

จับคู่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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