كيفية عمل defer
شغّل التعليمات البرمجية عند الخروج من النطاق بصرف النظر عن المسار.
كيفية عمل defer درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
ما الذي يفعله defer
تجدول كتلة defer تنفيذ الشيفرة عند اقتراب النطاق الحالي من الانتهاء، بغض النظر عن طريقة الخروج منه.
func demo() {
defer { print("cleanup") }
print("work")
}
demo()يُنفَّذ عند الخروج من النطاق
تُنفَّذ الشيفرة المؤجلة بعد انتهاء بقية النطاق، وقبل مغادرة التحكم له مباشرةً.
func greet() {
defer { print("goodbye") }
print("hello")
}
greet()defer بعد التدفق العادي
حتى مع وجود عدة عبارات، يُنفَّذ جسم defer أخيرًا.
func process() {
defer { print("3 deferred") }
print("1 start")
print("2 middle")
}
process()defer داخل حلقة
يُنفَّذ defer داخل جسم الحلقة في نهاية كل تكرار.
for i in 1...3 {
defer { print("end of iteration", i) }
print("start of iteration", i)
}defer داخل if
يمكن أن يكون النطاق أي كتلة. يُنفَّذ defer داخل if عند انتهاء كتلة if تلك.
func check(_ flag: Bool) {
if flag {
defer { print("leaving if block") }
print("inside if")
}
print("after if")
}
check(true)التقاط القيم الحالية
تلتقط الكتلة المؤجَّلة المتغيرات بالمرجع، ولذلك ترى قيمها في اللحظة التي تُنفَّذ فيها.
func counterDemo() {
var count = 0
defer { print("final count:", count) }
count = 5
}
counterDemo()defer لا يؤخر التنفيذ
لا يُنفَّذ defer بشكل غير متزامن. بل يُنفَّذ بشكل متزامن عند انتهاء النطاق، قبل أن تعود الدالة إلى مستدعيها.
func order() {
defer { print("B") }
print("A")
}
order()
print("C")استخدام شائع: إقران الإعداد والتنظيف
ضع التنظيف بجوار الإعداد مباشرةً، حتى يظل الاثنان مترابطين بصريًا ومنطقيًا.
func session() {
print("open session")
defer { print("close session") }
print("do work")
}
session()defer في كتلة do
يُنفَّذ defer داخل كتلة do عند الخروج من تلك الكتلة.
func run() {
do {
defer { print("do block cleanup") }
print("inside do")
}
print("after do")
}
run()عدة عبارات في defer
يمكن أن تحتوي كتلة defer على عدة عبارات؛ وتُنفَّذ كلها معًا عند انتهاء النطاق.
func multi() {
defer {
print("step 1 of cleanup")
print("step 2 of cleanup")
}
print("main work")
}
multi()لماذا نستخدم defer
يضمن defer حدوث التنظيف بصرف النظر عن طريقة انتهاء النطاق، مما يقلل احتمال نسيانه في بعض المسارات.
func guaranteed() {
defer { print("always runs") }
print("body")
}
guaranteed()تحقق سريع
اختبر توقيت defer.
مراجعة
يجدول defer تنفيذ التعليمات البرمجية في نهاية النطاق الحالي، بصرف النظر عن طريقة الخروج منه. ويُنفَّذ بشكل متزامن، وفي النهاية ضمن النطاق، وهو مثالي لإبقاء التنظيف بجوار الإعداد.
func demo() {
defer { print("last") }
print("first")
}
demo()الأسئلة الشائعة
هل درس «كيفية عمل defer» مجاني؟
نعم — نص درس «كيفية عمل defer» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «كيفية عمل defer»؟
شغّل التعليمات البرمجية عند الخروج من النطاق بصرف النظر عن المسار. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «كيفية عمل defer»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كيفية عمل defer
- ترتيب كتل defer المتعددة
- defer لتنظيف الموارد
- defer مع الأخطاء وعمليات الإرجاع المبكر