القيود التكرارية والأنواع العامة عالية الرتبة
اكتب قيودًا تكرارية مثل التسلسلات المتداخلة، ودوالًا عامة عالية الرتبة تقبل Closures أو دوالًا عامة.
القيود التكرارية والأنواع العامة عالية الرتبة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ولماذا
يوضح هذا الدرس:
- القيود التكرارية: قيود على الأعضاء العامة المتداخلة، مثل Sequence من Sequence.
- الأنواع العامة عالية الرتبة: دوال عامة تقبل إغلاقات أو دوال عامة.
التسلسلات المتداخلة (التسطيح)
هذا مثال كلاسيكي على قيد تكراري: نشترط C.Element: Sequence حتى نتمكن من التكرار عبر مستويين.
// Works for any Collection whose elements are Sequences
func flatten<C: Collection>(_ c: C) -> [C.Element.Element]
where C.Element: Sequence {
var result: [C.Element.Element] = []
result.reserveCapacity(c.reduce(0) { $0 + ($1 as AnySequence<C.Element.Element>).underestimatedCount })
for inner in c {
for e in inner { result.append(e) }
}
return result
}
let nested = [[1,2], [3], [4,5]]
print(flatten(nested)) // [1,2,3,4,5]تطبيق map على بنى متداخلة عامة
نفرض قيدين: C: Collection وC.Element: Collection، مما يتيح لنا استدعاء map في كل مستوى.
// Map over a two-level structure without fixing concrete types
func mapNested<C: Collection, R>(_ c: C, _ transform: (C.Element.Element) -> R) -> [[R]]
where C.Element: Collection {
return c.map { inner in inner.map(transform) }
}
let doubled = mapNested([[1,2],[3]], { $0 * 2 })
print(doubled) // [[2,4],[6]]compose(f,g)
الأنواع العامة عالية الرتبة: تكون الدالة عامة بالنسبة إلى الدوال نفسها، مما يتيح إنشاء مسارات قابلة لإعادة الاستخدام مثل compose.
// Compose two generic transforms that work on the same element type
func compose<A, B, C>(
_ f: @escaping (B) -> C,
_ g: @escaping (A) -> B
) -> (A) -> C {
{ a in f(g(a)) }
}
let toString: (Int) -> String = { "\\($0)" }
let length: (String) -> Int = { $0.count }
let intToLen = compose(length, toString)
print(intToLen(1234)) // 4معاملات الإغلاق العامة
يُعد الإغلاق f معاملًا عامًا أيضًا. ونحافظ على مرونة الأنواع باستخدام قيود where.
// A generic "transform each" that accepts ANY transform (generic in T/U)
func transformEach<T, U, C: Collection>(_ c: C, using f: (T) -> U) -> [U]
where C.Element == T {
var out: [U] = []
out.reserveCapacity(c.count)
for x in c { out.append(f(x)) }
return out
}
let words = ["swift","kit"]
print(transformEach(words, using: { $0.uppercased() })) // ["SWIFT","KIT"]الإرشادات
نصائح:
- اكتبوا أصغر مجموعة من القيود اللازمة، مثل
Sequenceبدلًا منCollection. - فضّلوا عبارات where لتحسين سهولة القراءة.
- اختبروا باستخدام أنواع ملموسة متعددة للتأكد من عمومية الحل.
- وثّقوا الافتراضات، مثل ترتيب العناصر وتفرّدها.
تعريف الأنواع العامة عالية الرتبة
تحقق سريع: ما الذي يجعل الدالة دالةً عامةً عالية الرتبة؟
الخلاصة
الخلاصة: استخدموا القيود التكرارية، مثل C.Element: Sequence، للعمل مع الأنواع العامة المتداخلة، واستخدموا الأنواع العامة عالية الرتبة لإنشاء مسارات دوال قابلة لإعادة الاستخدام بطريقة واضحة.
الأسئلة الشائعة
هل درس «القيود التكرارية والأنواع العامة عالية الرتبة» مجاني؟
نعم — نص درس «القيود التكرارية والأنواع العامة عالية الرتبة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «القيود التكرارية والأنواع العامة عالية الرتبة»؟
اكتب قيودًا تكرارية مثل التسلسلات المتداخلة، ودوالًا عامة عالية الرتبة تقبل Closures أو دوالًا عامة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «القيود التكرارية والأنواع العامة عالية الرتبة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الامتثال المشروط
- القيود التكرارية والأنواع العامة عالية الرتبة
- عبارات where على الامتدادات