الاختيار بين some وany والأنواع العامة
اختر generics للأنواع الساكنة المتجانسة، و some P لإخفاء نوع ملموس ثابت، و any P للتعددية الشكلية غير المتجانسة.
الاختيار بين some وany والأنواع العامة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
متى تستخدم كل خيار؟
قاعدة عامة:
- الأنواع العامة: النوع الملموس نفسه في كل استدعاء؛ وهي الأفضل لفحوص وقت الترجمة وللأداء.
- some P: إخفاء نوع الإرجاع الملموس، مع ثباته لكل دالة.
- any P: مزج الأنواع المتوافقة بشكل غير متجانس مع استخدام الإرسال الديناميكي.
الأنواع العامة: متجانسة
تُعد الأنواع العامة مثالية للبيانات المتجانسة والتحسين (الإرسال الثابت، والتضمين).
protocol Shape { func area() -> Double }
struct Circle: Shape { let r: Double; func area() -> Double { .pi * r * r } }
struct Square: Shape { let s: Double; func area() -> Double { s * s } }
// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)])) // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)]) // ❌ different typesالنوع المعتم: إخفاء مع الثبات
تُرجع some P نوعًا ثابتًا لكنه مخفي. وهي مناسبة عندما تريد التغليف دون فقدان الأداء الثابت.
// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
// Must return the SAME underlying type on all paths; pick one.
Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area())) // 3.14any P: غير متجانس
يتيح any P استخدام أنواع مختلطة في مجموعة أو متغير واحد؛ وتُرسَل الطرق ديناميكيًا عبر واجهة البروتوكول.
// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() } // dynamic dispatch
print(String(format: "%.2f", sum))مقارنة أشكال واجهة API
اختر الواجهة الظاهرة:
- النوع العام: يتحكم المستدعي في النوع الملموس.
- النوع المعتم: تخفي النوع، مع ثباته لكل دالة.
- النوع الوجودي: يمكنك تغيير الأنواع الملموسة ديناميكيًا.
// Three API shapes for the same idea: "make a Shape"
// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }
// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }
// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }
let g: Circle = makeGeneric(Circle(r: 2)) // caller knows concrete type
let o = makeOpaqueCircle() // caller sees only Shape
let e = makeExistential(true) // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())ورقة مرجعية
إرشادات:
- فضّل الأنواع العامة للأداء والكتابة القوية عندما تكون البيانات متجانسة.
- استخدم some P لإخفاء أنواع الإرجاع والحفاظ على استقرار واجهات API.
- استخدم any P للمجموعات الشبيهة بالمكونات الإضافية أو المختلطة.
- تجنّب any P للبروتوكولات التي تحتوي على أنواع مرتبطة أو Self، ما لم تمحُ النوع.
سؤال اختيار: some أو any أو الأنواع العامة
تحقّق سريعًا: أي خيار يخفي نوع إرجاع ملموسًا ثابتًا خلف البروتوكول P؟
خلاصة
خلاصة:
- الأنواع العامة = متجانسة، والأسرع، والأكثر اعتمادًا على الثبات.
- some P = إخفاء النوع الملموس، مع ثباته لكل دالة.
- any P = غير متجانسة، مع إرسال ديناميكي.
الأسئلة الشائعة
هل درس «الاختيار بين some وany والأنواع العامة» مجاني؟
نعم — نص درس «الاختيار بين some وany والأنواع العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «الاختيار بين some وany والأنواع العامة»؟
اختر generics للأنواع الساكنة المتجانسة، و some P لإخفاء نوع ملموس ثابت، و any P للتعددية الشكلية غير المتجانسة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «الاختيار بين some وany والأنواع العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة
- any P (وجودي): المفاضلات والإرسال الديناميكي
- الاختيار بين some وany والأنواع العامة