0Pricing
Swift Academy · درس

‏defer لتنظيف الموارد

أغلق الملفات وحرّر الموارد بشكل موثوق.

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

مشكلة التنظيف

يجب تحرير موارد مثل الملفات والأقفال والاتصالات. ويؤدي نسيان تحريرها في أحد المسارات إلى حدوث تسرّبات.

func work() {
    print("acquire resource")
    print("use resource")
    print("release resource")
}
work()

يضمن defer التحرير

يضمن وضع عملية التحرير داخل defer تنفيذها بصرف النظر عن طريقة خروج الدالة.

func work() {
    print("acquire resource")
    defer { print("release resource") }
    print("use resource")
}
work()

محاكاة واصف ملف

يحاكي هيكل بسيط هنا عمليتي الفتح والإغلاق. ويضمن defer استدعاء close دائمًا.

struct File {
    let name: String
    func close() { print("closed", name) }
}
func readFile() {
    let f = File(name: "data.txt")
    defer { f.close() }
    print("reading", f.name)
}
readFile()

اكتساب القفل وتحريره

حاكِ قفلًا: اكتسبه، ثم أجّل تحريره باستخدام defer، حتى يُحرَّر القفل دائمًا بعد انتهاء القسم الحرج.

func critical() {
    print("lock acquired")
    defer { print("lock released") }
    print("critical section work")
}
critical()

التنظيف بجوار الإعداد

إن إبقاء التنظيف مباشرةً بعد الإعداد يجعل الارتباط بينهما واضحًا ويصعّب نسيانه.

func session() {
    print("connect")
    defer { print("disconnect") }
    print("send request")
    print("receive response")
}
session()

موارد متعددة

عند استخدام عدة موارد، صرّح بكل عملية تنظيف مباشرةً بعد إعداد المورد؛ إذ يغلقها ترتيب LIFO بشكل صحيح.

func transaction() {
    print("open connection")
    defer { print("close connection") }
    print("begin transaction")
    defer { print("commit transaction") }
    print("run query")
}
transaction()

إعادة ضبط العداد

يمكن لكتلة defer استعادة الحالة، مثل إعادة ضبط علامة، عند انتهاء النطاق.

func tracked() {
    var active = true
    defer { active = false; print("active reset to", active) }
    print("active is", active)
}
tracked()

تجنب التكرار

من دون defer، ستضطر إلى تكرار عملية التنظيف في كل مسار للخروج. أما defer فيتيح كتابتها مرةً واحدة.

func validate(_ ok: Bool) {
    print("start")
    defer { print("cleanup done once") }
    if !ok {
        print("invalid")
        return
    }
    print("valid")
}
validate(false)

التنظيف باستخدام قيمة محسوبة

يمكن لكتلة defer تسجيل قياس نهائي، مثل عدد العناصر التي تمت معالجتها.

func batch() {
    var processed = 0
    defer { print("processed", processed, "items") }
    for _ in 1...3 { processed += 1 }
}
batch()

استعادة الحالة المؤقتة

استخدم defer لتغيير إعداد مؤقتًا ثم استعادته بشكل موثوق.

func withVerbose() {
    var verbose = false
    verbose = true
    defer { verbose = false; print("verbose restored:", verbose) }
    print("verbose during work:", verbose)
}
withVerbose()

أفضل ممارسة

كلما اكتسبت شيئًا يجب تحريره، سجّل عملية تحريره باستخدام defer في السطر التالي مباشرةً.

func handle() {
    print("acquire")
    defer { print("release") }
    print("process")
}
handle()

تحقق سريع

اختبر استخدام defer في التنظيف.

مراجعة

سجّل تحرير المورد باستخدام defer مباشرةً بعد اكتسابه. ويضمن ذلك تنفيذ التنظيف في كل مسار للخروج، ويبقي التنظيف بجوار الإعداد، ويتجنب تكرار التنظيف عبر مسارات العودة.

func work() {
    print("acquire")
    defer { print("release") }
    print("use")
}
work()

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

هل درس «‏defer لتنظيف الموارد» مجاني؟

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

ماذا ستتعلم في «‏defer لتنظيف الموارد»؟

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

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

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

كم من الوقت يستغرق درس «‏defer لتنظيف الموارد»؟

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

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

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

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

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