أساسيات Closures
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 38 من 56.
الإغلاق (closure) هو كتلة برمجية قائمة بذاتها يمكنك تمريرها واستدعاؤها لاحقاً. توضح الصيغة الكاملة أنواع المعاملات والقيم المرجعة:
let double = { (n: Int) -> Int in
return n * 2
}
print(double(5)) // 10يمكن لـ Swift استنتاج الأنواع عندما يكون السياق واضحاً، لذا نادراً ما تكتب الصيغة الطويلة. داخل map و filter وما إلى ذلك، فإن الاختصار الأقصر هو المعتاد:
let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 } // الأقصر، $0 هو الوسيط الأولالإغلاقات (Closures) هي قيم، يمكنك تخزينها في متغيرات، وإرجاعها من الدوال، وتمريرها كوسطاء. هذا هو السبب الكامل وراء عمل map.
التحدي
سهلاقرأ سطرين من المدخلات:
- عدد صحيح
x - قائمة من الأعداد الصحيحة مفصولة بفاصلة
قم بتعريف ثلاثة closures، كل منها بنوع (Int) -> Int:
addXيضيفxإلى المعامل الخاص بهsquareيعيد مربع المعاملnegateيعيد المعامل مع تغيير إشارته (سالب المعامل)
قم بتطبيق كل closure على كل عنصر في القائمة باستخدام map. اطبع ثلاثة أسطر، سطر لكل closure، مع دمج النتائج بواسطة ,:
addX: ...
square: ...
negate: ...للمدخلات 10 في السطر الأول و 1,2,3 في السطر الثاني، يكون المخرج هو:
addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3ورقة مرجعية
الـ closure (الإغلاق) هو كتلة برمجية ذاتية الاحتواء يمكن تخزينها وتمريرها. الصيغة الكاملة:
let double = { (n: Int) -> Int in
return n * 2
}يمكن تخزين الإغلاقات (Closures) في متغيرات وتمريرها كوسائط (على سبيل المثال إلى map). تستنتج لغة Swift الأنواع بناءً على السياق، مما يسمح بالاختصار:
let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 } // $0 هو الوسيط الأولجرّب بنفسك
let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: قم بتعريف ثلاث إغلاقات (closures) من نوع (Int) -> Int وقم بتمرير nums عبر كل منها
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات8Closures
أساسيات ClosuresTrailing Closuresالتقاط القيمإرجاع Closuresدوال Higher-Order مخصصةمراجعة - بناء Pipeline