أنواع القيم لتقليل المشاركة
فضّل أنواع القيم لتجنّب المشاركة غير المقصودة: إذ تُنسخ Structs وEnums عند الإسناد، مما يساعد على العزل وقابلية التوقّع وسلامة الخيوط.
أنواع القيم لتقليل المشاركة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
لماذا أنواع القيم؟
تُعدّ البنى/التعدادات في Swift أنواعاً قيمية: إذ ينشئ الإسناد والتمرير نسخاً. ويقلل ذلك من المشاركة غير المقصودة، ويجعل فهم الحالة أسهل.
مشاركة المراجع (class)
تُعدّ الفئات أنواعاً مرجعية: إذ يمكن لمتغيرات متعددة أن تشير إلى النسخة نفسها، لذلك تنتقل التعديلات عبر الأسماء المستعارة.
final class Bag {
var items: [String]
init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items) // ["pen","book"] — mutated via b
print(b.items)نسخ مستقلة (struct)
تنسخ البنى نفسها عند الإسناد. ويمتلك كل متغير بياناته الخاصة، فتبقى التعديلات محلية.
struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1 // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x) // 1, 99 — p1 unaffectedمجموعات النسخ عند الكتابة
تُعدّ Array/Dictionary/Set أنواعاً قيمية تستخدم النسخ عند الكتابة. وعندما تعدّل مصفوفة لها مراجع متعددة، تنشئ Swift نسخة جديدة.
var a1 = [1,2,3]
var a2 = a1 // copy-on-write handle
a2.append(4) // triggers copy if a1 is uniquely referenced
print(a1) // [1,2,3]
print(a2) // [1,2,3,4]التحديثات بأسلوب نقي
صمّم واجهات API شبه نقية: اقبل قيمة وأرجع قيمة جديدة. وبذلك يتجنب المستدعون التعديلات المشتركة غير المتوقعة.
struct Profile {
var name: String
var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
var copy = p // work on a value copy
copy.tags.append(tag) // caller gets a new updated value
return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags) // []
print(pB.tags) // ["swift"]الاختيار بحكمة
إرشادات:
- فضّل struct للبيانات الصغيرة غير القابلة للتغيير أو التي تُعدّل محلياً.
- استخدم class عند الحاجة إلى الهوية أو الحالة القابلة للتغيير والمشتركة أو الوراثة.
- تقلل أنواع القيم المشاركة، وتجعل التفكير في التزامن أكثر أماناً.
مشاركة القيم مقابل المراجع
تحقق سريع: لماذا تساعد أنواع القيم على تجنب المشاركة غير المقصودة؟
مراجعة
مراجعة: البنى/التعدادات هي قيم. استخدمها لتقليل الحالة القابلة للتغيير والمشتركة. وتستخدم المجموعات النسخ عند الكتابة حتى لا تفاجئ التعديلاتُ المالكين الآخرين.
الأسئلة الشائعة
هل درس «أنواع القيم لتقليل المشاركة» مجاني؟
نعم — نص درس «أنواع القيم لتقليل المشاركة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «أنواع القيم لتقليل المشاركة»؟
فضّل أنواع القيم لتجنّب المشاركة غير المقصودة: إذ تُنسخ Structs وEnums عند الإسناد، مما يساعد على العزل وقابلية التوقّع وسلامة الخيوط. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «أنواع القيم لتقليل المشاركة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات ARC: strong وweak وunowned
- دورات الاحتفاظ وكسرها باستخدام weak وunowned
- أنواع القيم لتقليل المشاركة