0Pricing
Swift Academy · درس

some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة

أعِد some P لإخفاء نوع الإرجاع الملموس مع ضمان توافقه مع P ؛ ويحصل المستدعون على أداء الأنواع الساكنة من دون كشف تفاصيل التنفيذ.

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

لماذا أنواع النتائج المعتمة؟

تستخدم أنواع النتائج المعتمة some P لإخفاء نوع ملموس خلف بروتوكول. ويكون النوع الملموس ثابتًا لهذه الدالة، لكن لا يرى المستدعون سوى واجهة البروتوكول.

  • تغليف دون فقدان الأداء الثابت
  • مناسبة جدًا للمصانع وواجهات API الشبيهة بـ DSL

مصنع أساسي للنتائج المعتمة

تُرجع makeUnitCircle() قيمة من النوع some Shape. يمكن للمستدعين استدعاء area()، لكن لا يمكنهم الاعتماد على النوع الملموس.

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 }
}

// Opaque factory: callers know it's a Shape, not which one
func makeUnitCircle() -> some Shape {
    Circle(r: 1.0)    // concrete type is hidden
}

let sh = makeUnitCircle()
print(String(format: "%.2f", sh.area()))  // 3.14

ثابتة لكل دالة

يكون النوع المخفي ثابتًا لكل دالة. وقد تخفي دالة أخرى تُرجع some Shape نوعًا ملموسًا مختلفًا.

// Each function using "some Shape" chooses one hidden concrete type.
// Within the same function, it must always be the same concrete type.
func makeSquare(side: Double) -> some Shape {
    Square(s: side)   // fixed to Square for this function
}

let a = makeUnitCircle()
let b = makeUnitCircle()
print(a.area() == b.area())  // true for two unit circles

let q = makeSquare(side: 2)
print(q.area())              // 4.0

نوع مخفي واحد فقط

القاعدة: يجب أن تُرجع الدالة ذات القيمة المعادة المعتمة النوع الملموس نفسه في جميع المسارات. تؤدي الفروع المختلفة إلى خطأ في الترجمة.

// ❌ This would NOT compile, because different branches return different concrete types:
// func makeShape(flag: Bool) -> some Shape {
//     if flag {
//         return Circle(r: 1)
//     } else {
//         return Square(s: 1) // error: underlying type must be the same
//     }
// }
// Rule: an opaque-returning function must always produce the same concrete type.

الأنواع المعتمة مع الأنواع العامة

تتوافق القيم المعادة المعتمة مع الأنواع العامة. يرى المستدعي Shape، بينما تحتفظ أنت بتنفيذ Scaled<Circle> خاصًا.

// A generic decorator that also conforms to Shape
struct Scaled<S: Shape>: Shape {
    let base: S
    let k: Double
    func area() -> Double { base.area() * k * k }
}

// Factory still hides the concrete generic type
func makeScaledUnitCircle(k: Double) -> some Shape {
    Scaled(base: Circle(r: 1.0), k: k)
}

let s1 = makeScaledUnitCircle(k: 2)
print(s1.area())  // 4 * π

متى تختار الأنواع المعتمة

استخدم الأنواع المعتمة عندما:

  • تريد إخفاء التنفيذ مع الحفاظ على الكتابة الثابتة.
  • ينبغي لواجهات API أن تُرجع عرضًا لبروتوكول (مثل Shape) دون كشف الأنواع الملموسة.
  • تنشئ سلاسل معالجة أو DSLs تربط المنشئات معًا مع بقائها عامة.

(ستقارنها بالأنواع الوجودية في الدرس التالي.)

تعريف النتيجة المعتمة

تحقّق سريعًا: ما الذي يضمنه some P؟

خلاصة

خلاصة: تخفي أنواع النتائج المعتمة (some P) الأنواع الملموسة مع الحفاظ على الإرسال الثابت. ويكون النوع الأساسي ثابتًا لكل دالة؛ فاستخدمها لإنشاء واجهات API نظيفة وسريعة ومغلّفة.

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

هل درس «some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة» مجاني؟

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

ماذا ستتعلم في «some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة»؟

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

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

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

كم من الوقت يستغرق درس «some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة»؟

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

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

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

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

  1. some P (أنواع النتائج غير الشفافة): إخفاء الأنواع الملموسة
  2. any P (وجودي): المفاضلات والإرسال الديناميكي
  3. الاختيار بين some وany والأنواع العامة
← العودة إلى Swift Academy