defer مقابل errdefer عملياً
اختاروا بين التنفيذ الدائم والتنفيذ عند الخطأ
defer مقابل errdefer عملياً درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
كلمتا التنظيف المفتاحيتان
يوفّر لك Zig أداتي جدولة: تعمل defer دائماً، بينما تعمل errdefer فقط عند خروج النطاق بسبب خطأ.
defer تعني دائماً
استخدم defer عندما يجب أن يحدث التنظيف مهما كان الأمر، مثل إغلاق ملف فتحته طوال الدالة.
const f = try open();
defer f.close();errdefer تعني عند الفشل
تُنفّذ errdefer فقط إذا غادر التنفيذ النطاق بسبب خطأ. أما عند العودة بنجاح، فتُتخطى بهدوء.
const buf = try alloc();
errdefer free(buf);لماذا تُتخطى عند النجاح
قد تنشئ أحياناً قيمة لكي تعيدها. عند النجاح، تصبح ملكاً للمستدعي، ولذلك يجب ألا تحرّرها؛ وتحترم errdefer ذلك.
كائنات أُنشئت جزئياً
تتألق errdefer في المنشئات. فإذا فشلت خطوة لاحقة، تلغي الحجوزات السابقة حتى لا يتسرّب كائن أُنشئ جزئياً.
const a = try alloc();
errdefer free(a);
const b = try alloc();انتقال الملكية عند النجاح
عند نجاح كل الخطوات، تعيد الدالة القيمة ولا تُنفّذ عبارات errdefer. وتنتقل الملكية إلى المستدعي بسلاسة.
return MyType{ .a = a, .b = b };تعملان معاً بشكل جيد
يمكنك المزج بينهما. تتولى defer ذاكرة العمل المؤقتة، بينما تحمي errdefer النتيجة التي تخطط لإعادتها.
كلتاهما تحترمان الترتيب العكسي
مثل defer، تُفكّك عبارات errdefer المتعددة بترتيب عكسي. عند حدوث خطأ، يشغّل Zig عبارات defer وerrdefer المطابقة معاً، بدءاً بالأحدث.
موضع العبارة مهم
ضع كل errdefer مباشرة بعد الخطوة التي تحميها. فهي تحمي فقط من حالات الفشل التي تحدث بعد الوصول إلى سطرها.
قاعدة بسيطة
اطرح سؤالاً واحداً: هل يجب أن يحدث هذا التنظيف عند النجاح أيضاً؟ إذا كانت الإجابة نعم، فاستخدم defer؛ وإذا كان عند الخطأ فقط، فاستخدم errdefer.
خلوّ من التسرّبات حسب التصميم
تتيح لك هاتان الكلمتان معاً كتابة دوال خالية من التسرّبات في كل المسارات، سواء النجاح أم الفشل، من دون تتبّع يدوي.
تحقّق سريع
متى تُنفّذ errdefer مقارنةً بـ defer؟
مراجعة
استخدم defer عندما يجب أن يحدث التنظيف دائماً، واستخدم errdefer عندما ينبغي أن تلغي العمل المنجز في مسار الخطأ فقط. ✅
تعلم Zig مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «defer مقابل errdefer عملياً» مجاني؟
نعم — نص درس «defer مقابل errdefer عملياً» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «defer مقابل errdefer عملياً»؟
اختاروا بين التنفيذ الدائم والتنفيذ عند الخطأ تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «defer مقابل errdefer عملياً»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يضمنه defer
- ترتيب تنفيذ عمليات defer المتعددة
- defer مقابل errdefer عملياً
- إقران Open بـ Close