0Pricing
Swift Academy · درس

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

اكتب أساليب تعدّل حالة struct و enum.

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

لا يمكن للدوال تغيير القيمة افتراضيًا

لا يمكن لدالة مثيل في struct تغيير خصائص struct المخزنة ما لم تُعلَّم باستخدام mutating.

struct Counter {
    var value = 0
    mutating func increment() {
        value += 1
    }
}
var c = Counter()
c.increment()
print(c.value)

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

بما أن الهياكل أنواع قيم، يفرض المترجم التصريح صراحةً بالرغبة في إجراء تعديل، حتى يكون التغيير واضحًا.

struct Bank {
    var balance = 0
    mutating func deposit(_ amount: Int) {
        balance += amount
    }
}
var b = Bank()
b.deposit(50)
print(b.balance)

الأساليب غير المُعدِّلة

الأسلوب الذي يقرأ الخصائص فقط لا يحتاج إلى mutating.

struct Rectangle {
    var width = 0
    var height = 0
    func area() -> Int {
        return width * height
    }
}
let r = Rectangle(width: 3, height: 4)
print(r.area())

mutating مع enum

يمكن أن تحتوي التعدادات أيضًا على أساليب mutating تنقل المثيل إلى حالة مختلفة.

enum Light {
    case on, off
    mutating func toggle() {
        self = (self == .on) ? .off : .on
    }
}
var l = Light.off
l.toggle()
print(l)

لا يمكن استدعاؤه على let

لا يمكنكم استدعاء أسلوب mutating على مثيل ثابت (let)؛ فهذا يؤدي إلى خطأ أثناء الترجمة.

struct Counter {
    var value = 0
    mutating func bump() { value += 1 }
}
var c = Counter()
c.bump()
// let d = Counter(); d.bump() // error
print(c.value)

تغيير عدة خصائص

يمكن لأسلوب واحد من نوع mutating تغيير عدة خصائص دفعةً واحدة.

struct Player {
    var x = 0
    var y = 0
    mutating func move(dx: Int, dy: Int) {
        x += dx
        y += dy
    }
}
var p = Player()
p.move(dx: 3, dy: 5)
print(p.x, p.y)

إرجاع قيمة باستخدام mutating

يمكن لأسلوب mutating أيضًا إرجاع قيمة أثناء تغيير الحالة.

struct Stack {
    var items: [Int] = []
    mutating func pop() -> Int? {
        return items.popLast()
    }
}
var s = Stack(items: [1, 2, 3])
print(s.pop() ?? -1)
print(s.items)

استخدامات المكتبة القياسية لـ mutating

الأساليب مثل append في Array هي أساليب mutating، ولذلك تحتاجون إلى مصفوفة معلنة باستخدام var لاستدعائها.

var nums = [1, 2]
nums.append(3)
print(nums)

mutating والحالة المحسوبة

يمكنكم تحديث الحالة المشتقة داخل أسلوب mutating، مع الحفاظ على اتساق القيود الثابتة.

struct Wallet {
    var coins = 0
    var label = "empty"
    mutating func add(_ n: Int) {
        coins += n
        label = coins > 0 ? "has coins" : "empty"
    }
}
var w = Wallet()
w.add(5)
print(w.coins, w.label)

الترتيب مهم

تُنفَّذ العبارات داخل أسلوب mutating من الأعلى إلى الأسفل، لذا ترى الأسطر اللاحقة التغييرات السابقة.

struct Accumulator {
    var total = 0
    mutating func process() {
        total += 1
        total *= 10
    }
}
var a = Accumulator()
a.process()
print(a.total)

الفئات لا تحتاج إلى mutating

يمكن للأنواع المرجعية (class) تعديل الخصائص دون هذه الكلمة المفتاحية، لأنها ليست أنواع قيم.

class Box {
    var value = 0
    func bump() { value += 1 }
}
let box = Box()
box.bump()
print(box.value)

تحقق سريع

اختبروا الكلمة المفتاحية mutating.

مراجعة

ضعوا العلامة mutating على أسلوب المثيل في struct أو enum عندما يغيّر الخصائص المخزنة، أو يبدّل الحالة في حالة التعدادات. لا يمكن استدعاء هذه الأساليب على مثيلات let. أما الفئات، لكونها أنواعًا مرجعية، فلا تحتاج إليها مطلقًا.

struct C { var v = 0; mutating func inc() { v += 1 } }
var c = C()
c.inc()
print(c.v)

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

هل درس «الكلمة المفتاحية mutating» مجاني؟

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

ماذا ستتعلم في «الكلمة المفتاحية mutating»؟

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

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

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

كم من الوقت يستغرق درس «الكلمة المفتاحية mutating»؟

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

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

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

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

  1. أنواع القيم وعدم قابلية التغيير
  2. الكلمة المفتاحية mutating
  3. ‏mutating وإعادة إسناد self
  4. البدائل غير المعدِّلة
← العودة إلى Swift Academy