0Pricing
Swift Academy · درس

الأساليب المعدِّلة ودلالات النسخ عند الكتابة

تعرّفوا إلى سبب ضرورة استخدام mutating وكيف تعمل آلية تحسين COW في Swift.

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

مرحبًا

يجب وضع علامة `mutating` على دوال البنى التي تعدّل الخصائص المخزنة. ويستخدم Swift أيضًا النسخ عند الكتابة (COW) لجعل دلالات القيم فعّالة.

الكلمة المفتاحية mutating

```swift struct Counter { var count = 0 mutating func increment() { count += 1 } mutating func reset() { count = 0 } } var c = Counter() c.increment() // count = 1 ``` من دون `mutating`، يرفض المترجم الدوال التي تغيّر `self`.

سبب الحاجة إلى mutating

البنى أنواع قيم. وعند تمرير بنية، فإنك تمرر *نسخة* منها. ويحتاج المترجم إلى `mutating` لمعرفة أن الدالة ستغيّر القيمة الأصلية: ```swift let c = Counter() c.increment() // ❌ cannot use mutating on let ```

إعادة إسناد self في mutating

يمكن لدالة `mutating` استبدال `self` بالكامل: ```swift struct Toggle { var isOn: Bool mutating func flip() { self = Toggle(isOn: !isOn) } } ```

دلالات القيم: سلوك النسخ

```swift var a = Counter() var b = a // b is an independent copy a.increment() print(a.count) // 1 print(b.count) // 0 — unaffected ``` يؤدي إسناد بنية إلى نسخ جميع خصائصها المخزنة.

النسخ عند الكتابة (COW)

تستخدم مجموعات Swift المضمنة، مثل Array وDictionary وSet وString، النسخ عند الكتابة (COW): ```swift var a = [1,2,3] var b = a // no copy yet — shared storage b.append(4) // NOW a copy is made — a is unchanged print(a) // [1,2,3] print(b) // [1,2,3,4] ```

سبب أهمية COW

من دون COW، سيؤدي كل إسناد لبنية إلى نسخ عميق لجميع محتوياتها. ويعني COW أن عمليات النسخ رخيصة، إذ لا تتطلب سوى زيادة في عدد المراجع، إلى أن تؤدي عملية تعديل إلى نسخ فعلي. وهذا يجعل أنواع القيم سريعة مثل أنواع المراجع في معظم الحالات.

تنفيذ COW مخصص

```swift struct Buffer { private var storage: NSMutableData private mutating func ensureUnique() { if !isKnownUniquelyReferenced(&storage) { storage = storage.mutableCopy() as! NSMutableData } } mutating func append(_ byte: UInt8) { ensureUnique() // safe to mutate storage now } } ```

mutating والبروتوكولات

يجب وضع علامة `mutating` على دوال البروتوكول التي تعدّل الحالة داخل تعريف البروتوكول: ```swift protocol Resettable { mutating func reset() } struct Counter: Resettable { var count = 0 mutating func reset() { count = 0 } } ``` لا تحتاج الأصناف التي تطبق البروتوكول إلى `mutating`، لأن الأصناف أنواع مراجع.

بنى let غير قابلة للتغيير بالكامل

```swift let pt = Point(x: 1, y: 2) pt.x = 3 // ❌ even though x is var inside Point ``` عند تخزين بنية في ثابت `let`، لا يمكن تعديل أي من خصائصها المخزنة.

تحقق سريع

متى ينفّذ النسخ عند الكتابة في Swift عملية النسخ فعليًا؟

مراجعة

أهم النقاط: • تشير `mutating` إلى الدوال التي تغيّر خصائص البنية • لا يمكن استدعاء الدوال `mutating` على البنى المخزنة في `let` • ينسخ الإسناد البنية، ويجعل COW ذلك رخيصًا بالنسبة إلى المجموعات • لا ينفّذ COW نسخة فعلية إلا عند أول عملية تعديل • نفّذ COW مخصصًا باستخدام `isKnownUniquelyReferenced` اكتمل المقرر! التالي: وراثة الأصناف.

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

هل درس «الأساليب المعدِّلة ودلالات النسخ عند الكتابة» مجاني؟

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

ماذا ستتعلم في «الأساليب المعدِّلة ودلالات النسخ عند الكتابة»؟

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

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

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

كم من الوقت يستغرق درس «الأساليب المعدِّلة ودلالات النسخ عند الكتابة»؟

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

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

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

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

  1. المهيئات بحسب الأعضاء والمهيئات المخصّصة
  2. الخصائص المخزّنة ومراقبو الخصائص
  3. الخصائص المحسوبة في البنى
  4. الأساليب المعدِّلة ودلالات النسخ عند الكتابة
← العودة إلى Swift Academy