0Pricing
Swift Academy · درس

‏map و compactMap

حوّل العناصر واحذف القيم nil.

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

ما هي map؟

‏map دالة من الدرجة الأعلى: تستقبل إغلاقًا وتطبّقه على كل عنصر في تسلسل، ثم تُرجع مصفوفة جديدة من النتائج المحوّلة.

  • لا تُعدَّل المجموعة الأصلية مطلقًا
  • يساوي عدد النتائج دائمًا عدد عناصر الإدخال
  • يمكن أن يتغير نوع العنصر، مثل Int → String

مثال بسيط على map

مضاعفة كل رقم في مصفوفة:

let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)  // [2, 4, 6, 8]

تغيير نوع العنصر

يمكن لـ map تحويل قيم Int إلى قيم String:

let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels)  // ["ID-10", "ID-20", "ID-30"]

استخدام map مع دالة مُسمّاة

يمكنكم تمرير أي دالة بتوقيع مطابق، وليس إغلاقًا لاحقًا فقط:

let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper)  // ["SWIFT", "MAP"]

المشكلة التي لا يحلها map

يحتفظ map بكل عنصر. إذا أعاد التحويل قيمة اختيارية، أي إذا كان قد يفشل، فستحصلون على مصفوفة من القيم الاختيارية مثل [Int?]، مليئة بمواضع nil يتعين عليكم تصفيتها لاحقًا.

وهذه هي المشكلة التي يحلها compactMap بالضبط.

هنا يأتي compactMap

يحوّل compactMap كل عنصر ويحذف أي نتيجة تساوي nil، ثم يُرجع مصفوفة غير اختيارية:

let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums)  // [1, 2, 4]  -- "x" was dropped

مقارنة مباشرة بين map و compactMap

يكمن الفرق في بقاء النتائج التي تساوي nil أو حذفها:

let raw = ["1", "x", "3"]
print(raw.map { Int($0) })       // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]

فك تغليف القيم الاختيارية في مجموعة

يُعد compactMap الطريقة الاصطلاحية لإزالة قيم nil من مصفوفة القيم الاختيارية:

let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean)  // [1, 3, 5]

تحليل البيانات باستخدام compactMap

من الاستخدامات الشائعة عمليًا: تحليل أسطر الإدخال الصالحة فقط:

let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values)      // [42, 7]
print(values.reduce(0, +))  // 49

الجمع بين map و compactMap

يمكنكم تسلسلهما: استخدموا map لتشكيل البيانات، ثم compactMap للاحتفاظ بالنتائج الناجحة فقط:

let scores = ["90", "85", "n/a", "70"]
let passed = scores
    .compactMap { Int($0) }
    .map { $0 >= 80 ? "pass" : "fail" }
print(passed)  // ["pass", "pass", "fail"]

استخدام compactMap مع سلاسل القيم الاختيارية

يعمل أيضًا بشكل رائع مع الوصول إلى الخصائص الاختيارية:

struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names)  // ["Ann", "Bo"]

اختبار سريع

ما الدالة التي تحوّل العناصر وتزيل النتائج التي تساوي nil في خطوة واحدة؟

مراجعة

لقد تعلمتم دالتي التحويل الأساسيتين:

  • map — تحوّل كل عنصر، ويساوي عدد النتائج عدد عناصر الإدخال
  • compactMap — تحوّل العناصر وتحذف nil، وهي مناسبة للتحليل وفك تغليف القيم الاختيارية
  • تُرجع كلتاهما مصفوفات جديدة ولا تعدّلان المصدر مطلقًا
  • يمكن تسلسلهما لتشكيل البيانات ثم تصفيتها بوضوح

التالي: التصفية باستخدام المسندات.

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

هل درس «‏map و compactMap» مجاني؟

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

ماذا ستتعلم في «‏map و compactMap»؟

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

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

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

كم من الوقت يستغرق درس «‏map و compactMap»؟

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

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

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

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

  1. ‏map و compactMap
  2. ‏filter والمسندات
  3. ‏reduce و reduce(into:)
  4. ‏flatMap والتسلسل
← العودة إلى Swift Academy