العودة إلى الدورة

نشر الأخطاء و errdefer

الدورة الكاملة: برمجة Zig من الصفر حتى الاحتراف

errdefer

تعمل errdefer مثل defer تماماً، لكنها لا تُنفذ إلا إذا قامت الدالة بإرجاع خطأ. هذا ضروري جداً لتنظيف الموارد أو التراجع عن عمليات جزئية عند فشل العملية.

zig fn createData() !*Data { const data = try allocator.create(Data); errdefer allocator.destroy(data); // التنظيف فقط في حالة حدوث خطأ!

try data.initialize();
return data;

}

إذا فشلت initialize()، سيتم تحرير الذاكرة. أما إذا نجحت، فسيتم الاحتفاظ بالذاكرة.