0Pricing
Swift Academy · درس

التعدادات غير المباشرة والبنى التكرارية

أنشئوا القوائم المرتبطة والأشجار باستخدام حالات التعداد indirect.

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

مرحبًا

تخزّن حالة تعداد `indirect` قيمتها المرتبطة خلف مؤشّر، مما يتيح إنشاء هياكل بيانات عودية مثل القوائم المرتبطة والأشجار وأشجار التعبيرات.

لماذا نحتاج إلى indirect

من دون `indirect`، سيكون حجم التعداد الذي يشير إلى نفسه لا نهائيًا: ```swift enum List { case empty case node(T, List) // ❌ recursive without size bound } ``` يضيف `indirect` تخصيصًا في الكومة، لذا يصبح الحجم مساويًا لحجم مؤشّر فقط.

تعريف تعداد indirect

```swift indirect enum List { case empty case node(T, List) } let list = List.node(1, .node(2, .node(3, .empty))) // [1, 2, 3] ```

مثال على شجرة ثنائية

```swift indirect enum Tree { case leaf case branch(left: Tree, value: T, right: Tree) } let t = Tree.branch(left: .leaf, value: 5, right: .branch(left:.leaf, value:10, right:.leaf)) ```

دالة عودية على تعداد indirect

```swift func sum(_ list: List) -> Int { switch list { case .empty: return 0 case .node(let value, let rest): return value + sum(rest) } } print(sum(list)) // 6 ```

ارتفاع الشجرة

```swift func height(_ tree: Tree) -> Int { switch tree { case .leaf: return 0 case .branch(let l, _, let r): return 1 + max(height(l), height(r)) } } ```

أشجار التعبيرات

```swift indirect enum Expr { case num(Double) case add(Expr, Expr) case mul(Expr, Expr) } func eval(_ e: Expr) -> Double { switch e { case .num(let n): return n case .add(let a, let b): return eval(a) + eval(b) case .mul(let a, let b): return eval(a) * eval(b) } } print(eval(.mul(.num(2), .add(.num(3), .num(4))))) // 14 ```

indirect لكل حالة

يمكنكم وضع علامة `indirect` على الحالات العودية فقط بدلًا من التعداد بأكمله: ```swift enum Tree { case leaf indirect case branch(left: Tree, value: T, right: Tree) } ``` هذا أكثر دقة، إذ إن الحالة العودية وحدها تتطلب تخصيصًا في الكومة.

اعتبارات الأداء

تُخصَّص حالات `indirect` في الكومة. وللهياكل العودية الحساسة للأداء، يمكنكم التفكير في استخدام فئة أو الإشارة إلى تمثيل قائم على المصفوفات بدلًا من ذلك.

متى تُستخدم تعدادات indirect

حالات الاستخدام المناسبة: • القوائم المرتبطة وهياكل البيانات الوظيفية • أشجار بناء الجملة المجرّدة (ASTs) للمحللات والحاسبات • تدرجات أنظمة الملفات • تمثيلات الأشجار في JSON وXML تجنّبوها عندما تكون التمثيلات القائمة على المصفوفات المسطحة أفضل من حيث الاستفادة من ذاكرة التخزين المؤقت.

تحقّق سريع

ماذا يضيف `indirect` إلى حالة التعداد؟

مراجعة

أهم النقاط: • يتيح `indirect enum` أو `indirect case` الأنواع العودية • نحتاج إليه لأن أنواع القيم العودية ستكون ذات حجم لا نهائي • يُستخدم للقوائم المرتبطة والأشجار وأشجار بناء الجملة المجرّدة (ASTs) • يمكن اجتيازها باستخدام الدوال العودية و`switch` • يكون `indirect` لكل حالة أدق من استخدامه على التعداد بأكمله التالي: نمذجة آلات الحالات باستخدام التعدادات.

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

هل درس «التعدادات غير المباشرة والبنى التكرارية» مجاني؟

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

ماذا ستتعلم في «التعدادات غير المباشرة والبنى التكرارية»؟

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

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

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

كم من الوقت يستغرق درس «التعدادات غير المباشرة والبنى التكرارية»؟

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

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

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

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

  1. القيم الخام وCaseIterable
  2. القيم المرتبطة للبيانات الغنية
  3. التعدادات غير المباشرة والبنى التكرارية
  4. نمذجة آلات الحالات باستخدام التعدادات
← العودة إلى Swift Academy