0Pricing
Swift Academy · درس

ترتيب كتل defer المتعددة

افهم ترتيب التنفيذ العكسي لعبارات defer.

ترتيب كتل defer المتعددة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

عدة كتل defer

يمكن أن يحتوي النطاق على عدة كتل defer. وتُنفَّذ كلها عند انتهاء النطاق.

func demo() {
    defer { print("A") }
    defer { print("B") }
    print("body")
}
demo()

الترتيب العكسي (LIFO)

تُنفَّذ الكتل المؤجَّلة بترتيب عكسي لترتيب التصريح بها: تُنفَّذ الكتلة التي صُرِّح بها أخيرًا أولًا.

func order() {
    defer { print("1") }
    defer { print("2") }
    defer { print("3") }
    print("start")
}
order()

لماذا LIFO

يعكس ترتيب LIFO طريقة تداخل الإعداد والتنظيف: إذ يُلغى الإعداد الأحدث أولًا.

func resources() {
    print("open A")
    defer { print("close A") }
    print("open B")
    defer { print("close B") }
    print("use both")
}
resources()

التصور الذهني للتكديس

فكّر في كتل defer على أنها مكدس: تضيف كل كتلة مهمةً إلى المكدس، ثم تُزال المهام بترتيب عكسي عند انتهاء النطاق.

func stack() {
    defer { print("pop first-declared last") }
    defer { print("pop last-declared first") }
    print("push done")
}
stack()

كتل defer والحالة المحلية

تلتقط كل كتلة defer المتغيرات المحيطة بها، وترى قيمها النهائية عند تنفيذها.

func state() {
    var x = 1
    defer { print("x is", x) }
    x = 42
}
state()

كتل defer داخل حلقة

داخل الحلقة، يسجّل كل تكرار كتل defer الخاصة به ويُنفّذها بترتيب LIFO في نهاية ذلك التكرار.

for i in 1...2 {
    defer { print("late", i) }
    defer { print("early", i) }
    print("body", i)
}

النطاقات المتداخلة

تُنفَّذ كتل defer عند انتهاء نطاقها الخاص، ولذلك تُنفَّذ كتلة defer في الكتلة الداخلية قبل كتلة defer في الكتلة الخارجية.

func nested() {
    defer { print("outer defer") }
    do {
        defer { print("inner defer") }
        print("inner body")
    }
    print("outer body")
}
nested()

تنظيف يمكن التنبؤ به

يعني ترتيب LIFO أن أزواج الفتح والإغلاق المتطابقة تُغلَق تلقائيًا بالتسلسل الصحيح.

func files() {
    print("open log")
    defer { print("flush log") }
    print("open db")
    defer { print("disconnect db") }
    print("transaction")
}
files()

قراءة الترتيب

لتوقّع الناتج، اقرأ كتل defer من الأسفل إلى الأعلى: تُطبع نتيجة آخر defer في النطاق أولًا.

func quiz() {
    defer { print("one") }
    defer { print("two") }
    print("body runs first")
}
quiz()

الجمع مع return

تستمر جميع كتل defer المسجَّلة في التنفيذ بترتيب LIFO حتى عند عودة الدالة مبكرًا.

func early(_ skip: Bool) {
    defer { print("cleanup 1") }
    defer { print("cleanup 2") }
    if skip { return }
    print("full body")
}
early(true)

أفضل ممارسة

صرّح بكل عملية تنظيف مباشرةً بعد إعدادها، واعتمد على ترتيب LIFO لفكّها بالترتيب الصحيح.

func pattern() {
    print("acquire 1")
    defer { print("release 1") }
    print("acquire 2")
    defer { print("release 2") }
    print("work")
}
pattern()

تحقق سريع

اختبر ترتيب defer.

مراجعة

تُنفَّذ كتل defer المتعددة بترتيب عكسي (LIFO) عند انتهاء النطاق: تُنفَّذ الكتلة التي صُرِّح بها أخيرًا أولًا. وبهذا تُفك أزواج الإعداد والتنظيف المتداخلة طبيعيًا بالترتيب الصحيح، حتى عند العودة مبكرًا.

func demo() {
    defer { print("1") }
    defer { print("2") }
    print("body")
}
demo()

الأسئلة الشائعة

هل درس «ترتيب كتل defer المتعددة» مجاني؟

نعم — نص درس «ترتيب كتل defer المتعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «ترتيب كتل defer المتعددة»؟

افهم ترتيب التنفيذ العكسي لعبارات defer. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «ترتيب كتل defer المتعددة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كيفية عمل defer
  2. ترتيب كتل defer المتعددة
  3. ‏defer لتنظيف الموارد
  4. ‏defer مع الأخطاء وعمليات الإرجاع المبكر
← العودة إلى Swift Academy