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