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

ลำดับการทำงานของ defer หลายรายการ

เหตุใดโค้ดที่เลื่อนทำงานจึงทำงานย้อนกลับลำดับ

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

defer มากกว่าหนึ่งรายการ

scope เดียวสามารถมีคำสั่ง defer ได้หลายคำสั่ง เมื่อ scope สิ้นสุดลง Zig ต้องตัดสินใจว่าจะให้คำสั่งเหล่านี้ทำงานตามลำดับใด

ทำงานย้อนลำดับ

defer หลายรายการทำงานตามลำดับ ย้อนกลับ: รายการสุดท้ายที่คุณเขียนจะทำงานก่อน และรายการแรกจะทำงานทีหลังสุด

defer one();
defer two();

เข้าทีหลัง ออกก่อน

นี่คือพฤติกรรมแบบ LIFO ตามแบบฉบับ เช่นเดียวกับสแตก defer แต่ละรายการถูกเพิ่มเข้าไป แล้วนำออกตามลำดับย้อนกลับ

ตัวอย่างสั้น ๆ

ในที่นี้ defer สองรายการทำงานหลังจากการประมวลผลเสร็จ ผลลัพธ์คือ สอง แล้วจึงหนึ่ง เพราะ defer ที่เขียนทีหลังถูกนำออกก่อนรายการแรก

defer print("one");
defer print("two");
work();

เหตุผลที่ลำดับย้อนกลับเหมาะสม

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

สะท้อนลำดับการขอใช้

เปิด A แล้วเปิด B จากนั้น defer แบบย้อนกลับจะ close B แล้วจึง A ซึ่งสะท้อนลำดับการเตรียมทรัพยากรได้อย่างสมบูรณ์

a.open(); defer a.close();
b.open(); defer b.close();

บันทึกเมื่อกำหนดเวลา

defer แต่ละรายการจดจำโค้ดของตนตามลำดับ แม้การทำงานจะรออยู่ก็ตาม ลำดับจะถูกกำหนดทันทีที่โค้ดมาถึง defer แต่ละรายการ

ข้ามหากไปไม่ถึง

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

if (early) return;
defer late();

สแตกแยกตามแต่ละ Scope

แต่ละ scope มี สแตก defer ของตนเอง scope ด้านในจะนำ defer ของตัวเองออกก่อนที่ scope ด้านนอกจะนำของตนออก

การรื้อถอนที่คาดเดาได้

เมื่อรู้กฎลำดับย้อนกลับ คุณจะวิเคราะห์การเก็บกวาดได้อย่างแม่นยำ ดังนั้นลำดับ การรื้อถอนจะไม่ทำให้ประหลาดใจ

แบบจำลองทางความคิดที่มีประโยชน์

ลองนึกภาพการวางจานซ้อนกัน: คุณวางจานจากล่างขึ้นบน แต่ต้อง นำออกจากด้านบน โดยนำจานใบสุดท้ายออกก่อน

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

มี defer สองรายการ คือหนึ่งแล้วสอง ลำดับการทำงานเป็นอย่างไร

สรุปทบทวน

defer หลายรายการจะถูกนำออกตามลำดับ ย้อนกลับ เช่นเดียวกับสแตก ดังนั้นทรัพยากรที่สร้างใหม่สุดจะถูกปล่อยก่อน และการเก็บกวาดจะสะท้อนลำดับการเตรียมทรัพยากร 🔁

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

บทเรียน “ลำดับการทำงานของ defer หลายรายการ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ลำดับการทำงานของ defer หลายรายการ”

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

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

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

บทเรียน “ลำดับการทำงานของ defer หลายรายการ” ใช้เวลานานแค่ไหน

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

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

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

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

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