Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أساسيات 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.

challenge icon

التحدي

سهل

اقرأ سطرين من المدخلات:

  1. عدد صحيح x
  2. قائمة من الأعداد الصحيحة مفصولة بفاصلة

قم بتعريف ثلاثة 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

جرّب بنفسك

let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: قم بتعريف ثلاث إغلاقات (closures) من نوع (Int) -> Int وقم بتمرير nums عبر كل منها
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق والتدفق

تدرّب بنفسك: Playground لـ Swift