0Pricing
Swift Academy · درس

الاستنتاج في الإغلاقات

افهم استنتاج المعلمات وقيمة الإرجاع في الإغلاقات.

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

تستنتج Closures أنواعها

في العديد من السياقات، يمكن لـ closure استنتاج نوعي معاملاتها وقيمتها المُعادة من طريقة استخدامها.

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

نوع المعامل المستنتج

عند تمرير closure إلى map، يخبر نوع العنصر Swift بماهية $0، لذا يمكنكم حذف نوع المعامل.

let names = ["ada", "bob"]
let upper = names.map { $0.uppercased() }
print(upper)

نوع القيمة المُعادة المستنتج

يحدد جسم closure نوع القيمة التي تعيدها. وإعادة قيمة من النوع Bool تجعل closure دالة شرطية.

let nums = [1, 2, 3, 4, 5]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)

أسماء المعاملات المختصرة

تشير $0 و$1 وما شابه إلى معاملات closure حسب مواضعها عندما تكون أنواعها مستنتجة.

let sums = zip([1, 2, 3], [10, 20, 30]).map { $0 + $1 }
print(Array(sums))

المعاملات الصريحة عند الحاجة

لا يزال بإمكانكم تسمية المعاملات وتحديد أنواعها إذا كان ذلك يحسن الوضوح.

let nums = [3, 1, 2]
let sorted = nums.sorted { (a: Int, b: Int) -> Bool in
    return a < b
}
print(sorted)

الاستنتاج من السياق

إذا أسندتم closure إلى متغير ذي نوع محدد، فإن نوع المتغير يخبر closure بتوقيعها.

let add: (Int, Int) -> Int = { a, b in a + b }
print(add(2, 3))

Closure لاحقة

تحافظ صياغة closure اللاحقة على عمل الاستنتاج، مع جعل مواضع الاستدعاء أكثر سهولة في القراءة.

let result = [5, 3, 8, 1].sorted { $0 > $1 }
print(result)

الاستنتاج في reduce

في reduce، يُستنتج نوعا المُجمِّع والعنصر من القيمة الابتدائية والتسلسل.

let total = [1, 2, 3, 4].reduce(0) { acc, x in acc + x }
print(total)

الإعادة من Closure

يمكن لـ closures ذات التعبير الواحد حذف الكلمة المحجوزة return؛ إذ تُعاد قيمة التعبير ويُستنتج نوعها.

let lengths = ["hi", "hello", "hey"].map { $0.count }
print(lengths)

متغير Closure محدد النوع

عند تخزين closure من دون استدعائها فورًا، حدّدوا نوعها حتى يتمكن Swift من استنتاج جسمها.

let transform: (String) -> Int = { $0.count }
print(transform("swift"))

متى يجب تحديد النوع

إذا لم يوفر السياق المحيط أي معلومات عن النوع، فلن يتمكن Swift من استنتاج معاملات closure، ويجب عليكم تحديد أنواعها.

let isPositive: (Int) -> Bool = { n in n > 0 }
print(isPositive(5), isPositive(-3))

اختبار سريع

اختبروا استنتاج أنواع closures.

مراجعة

تستنتج closures أنواع المعاملات والقيمة المُعادة من سياق مثل map وfilter أو متغير ذي نوع محدد. استخدموا الصياغة المختصرة $0/$1 عندما تكون الأنواع مستنتجة، وحددوا الأنواع صراحةً عند عدم توفر سياق.

let f: (Int) -> Int = { $0 + 1 }
let xs = [1, 2, 3].map { $0 * 10 }
print(f(9), xs)

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

هل درس «الاستنتاج في الإغلاقات» مجاني؟

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

ماذا ستتعلم في «الاستنتاج في الإغلاقات»؟

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

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

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

كم من الوقت يستغرق درس «الاستنتاج في الإغلاقات»؟

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

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

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

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

  1. كيفية عمل استنتاج النوع
  2. متى تضيف التعليقات التوضيحية الصريحة
  3. الاستنتاج مع الثوابت
  4. الاستنتاج في الإغلاقات
← العودة إلى Swift Academy