Swift Academy · درس

التعديل والمشاركة والاسم المستعار غير المتوقّع

تعرّفوا إلى كيفية تسبب المراجع المشتركة في الأخطاء، وكيف تمنع أنواع القيم ذلك.

الدرس 2 من 412 خطوة

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

مرحبًا

يحدث التشارك المرجعي عندما يشير متغيران إلى الكائن نفسه. يستحيل ذلك مع أنواع القيم، لكنه يؤدي إلى أخطاء مفاجئة مع أنواع المراجع. ويُعد فهم هذا الفرق أساسيًا.

لا يحدث التشارك المرجعي في أنواع القيم

```swift var a = [1,2,3] var b = a // independent copy a.append(4) print(b) // [1,2,3] — unchanged ``` ينشئ كل إسناد لنوع قيمة نسخة مستقلة.

تشارك أنواع المراجع المرجع فعلًا

```swift class Counter { var value = 0 } let a = Counter() let b = a // SAME object a.value += 1 print(b.value) // 1 — b sees the change! ``` يشير كل من `a` و`b` إلى كائن الكومة نفسه.

التشارك المرجعي في معاملات الدوال

```swift func increment(_ c: Counter) { c.value += 1 } let shared = Counter() increment(shared) print(shared.value) // 1 — mutated by the function ``` تُمرَّر الفئات حسب المرجع — لذلك تغيّر الدالة الكائن الأصلي.

المشكلة: الحالة المشتركة القابلة للتغيير

```swift class Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // aliased! cache.items.append("data") print(cache2.items) // ["data"] — unexpected! ``` هكذا تؤثر أجزاء تبدو غير مرتبطة من التعليمات البرمجية في بعضها بعضًا.

الحل باستخدام أنواع القيم

```swift struct Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // independent copy cache.items.append("data") print(cache2.items) // [] — unaffected ```

الحل باستخدام الفئات الناسخة

```swift func process(_ c: Counter) { var local = Counter() local.value = c.value // copy values, not reference local.value += 1 } ``` عندما تحتاجون إلى دلالات المرجع من دون تشارك مرجعي، انسخوا القيم صراحةً.

سلامة الخيوط والتشارك المرجعي

تصبح المشاركة المرجعية خطيرة بشكل خاص بين الخيوط: ```swift // Thread 1: cache.items.append("a") // Thread 2 simultaneously: cache.items.append("b") // ❌ data race! ``` تمنع أنواع القيم في Swift Concurrency حدوث ذلك افتراضيًا — إذ إن actors وحدها يمكنها مشاركة الحالة القابلة للتغيير.

اكتشاف المشاركة المرجعية غير المقصودة

يكتشف Thread Sanitizer (TSan) في Xcode سباقات البيانات أثناء التشغيل. فعّلوه من Scheme > Diagnostics > Thread Sanitizer. تلتقط Swift Exclusivity Enforcement انتهاكات المشاركة المرجعية أحادية الخيط لمعلمات `inout` أثناء التشغيل.

أنماط المشاركة المرجعية المقصودة

تكون المشاركة المرجعية مقصودة أحيانًا — مثل ذاكرة تخزين مؤقت عامة: ```swift class AppCache { static let shared = AppCache() // intentional shared reference var data: [String: Any] = [:] } ``` وثّقوا المشاركة المقصودة بوضوح؛ وتجنبوا المشاركة المرجعية غير المقصودة باستخدام أنواع القيم افتراضيًا.

تحقق سريع

ماذا يحدث عند إسناد مثيل من فئة إلى متغير جديد؟

مراجعة

أهم النقاط: • أنواع القيم (struct) — ينسخ الإسناد القيمة؛ ولا يمكن حدوث مشاركة مرجعية • أنواع المراجع (class) — يشارك الإسناد المرجع؛ ويمكن حدوث مشاركة مرجعية • المشاركة المرجعية بين الخيوط = سباق بيانات • استخدموا structs افتراضيًا؛ ولا تستخدموا classes إلا عند الحاجة إلى هوية مشتركة • استخدموا TSan وSwift Exclusivity لاكتشاف المشكلات التالي: رسوم بيانية مختلطة من القيم والمراجع.
البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
122
الدروس
409

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

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

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

ماذا ستتعلم في «التعديل والمشاركة والاسم المستعار غير المتوقّع»؟

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

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

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

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

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

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

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

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

  1. المكدس مقابل الكومة: أين تعيش القيم
  2. التعديل والمشاركة والاسم المستعار غير المتوقّع
  3. رسوم بيانية مختلطة للقيم والمراجع
  4. تصميم واجهات API لدلالات القيم
← العودة إلى Swift Academy