Swift Academy · درس

البدائل غير المعدِّلة

أعد قيمًا جديدة بدلًا من التعديل في مكانها.

الدرس 4 من 413 خطوة

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

الإرجاع بدلًا من التعديل

بدلًا من تغيير المثيل في موضعه، يمكن لأسلوب غير مُعدِّل إرجاع قيمة جديدة تمامًا بعد تطبيق التغيير عليها.

struct Counter {
    var value: Int
    func incremented() -> Counter {
        return Counter(value: value + 1)
    }
}
let c = Counter(value: 0)
let next = c.incremented()
print(c.value, next.value)

يبقى الأصل دون تغيير

بما أنه لم يُجرَ أي تعديل، تبقى القيمة الأصلية محفوظة، ويتم إنشاء قيمة جديدة.

struct Vector {
    var x: Int
    var y: Int
    func scaled(by factor: Int) -> Vector {
        return Vector(x: x * factor, y: y * factor)
    }
}
let v = Vector(x: 2, y: 3)
let big = v.scaled(by: 10)
print(v.x, v.y, big.x, big.y)

يعمل مع مثيلات let

يمكن استدعاء الأساليب غير المُعدِّلة على الثوابت let، لأنها لا تغيّر المثيل الذي تُستدعى عليه.

struct Money {
    var cents: Int
    func plus(_ other: Int) -> Money {
        return Money(cents: cents + other)
    }
}
let m = Money(cents: 100)
print(m.plus(50).cents)

اصطلاح التسمية

وفق اصطلاح Swift، تستخدم الأساليب المُعدِّلة أفعالًا بصيغة الأمر (sort)، بينما تستخدم الأساليب غير المُعدِّلة صيغ اسم المفعول أو الصيغ المنتهية بـ -ed أو -ing (sorted).

var nums = [3, 1, 2]
let ordered = nums.sorted()
nums.sort()
print(ordered, nums)

sorted مقابل sort

تتبع المكتبة القياسية هذا الاصطلاح: إذ تُرجع sorted() مصفوفة جديدة، بينما تعدّل sort() المصفوفة في موضعها.

let a = [5, 2, 8, 1]
let b = a.sorted()
print(a)
print(b)

reversed مقابل reverse

وبالمثل، فإن reversed() لا يُجري تعديلًا. وهنا نحوّله إلى قيمة فعلية باستخدام Array.

let a = [1, 2, 3]
let b = Array(a.reversed())
print(a, b)

تسلسل الاستدعاءات غير المُعدِّلة

تُرجع الأساليب غير المُعدِّلة قيمًا، ولذلك يمكنكم تسلسل استدعاءاتها بسلاسة.

let result = [4, 2, 9, 1].sorted().map { $0 * 2 }
print(result)

الأسلوب الوظيفي

يدعم إرجاع قيم جديدة بدلًا من تعديل القيم أسلوبًا وظيفيًا يسهل اختباره وتحليل سلوكه.

struct Account {
    var balance: Int
    func deposited(_ n: Int) -> Account {
        return Account(balance: balance + n)
    }
}
let a0 = Account(balance: 0)
let a1 = a0.deposited(100).deposited(50)
print(a0.balance, a1.balance)

تجنب أخطاء الحالة المشتركة

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

struct Settings {
    var volume: Int
    func with(volume newVolume: Int) -> Settings {
        return Settings(volume: newVolume)
    }
}
let base = Settings(volume: 5)
let loud = base.with(volume: 11)
print(base.volume, loud.volume)

متى نستخدم التعديل بدلًا من ذلك

إذا كنتم تحدّثون المثيل نفسه مرارًا داخل حلقة، فقد يكون التعديل في موضعه أكثر كفاءة من إنشاء نسخ عديدة.

var total = 0
for n in 1...5 {
    total += n
}
print(total)

توفير الشكلين

توفّر الأنواع المصممة جيدًا أحيانًا الشكلين، مثل المكتبة القياسية، ليختار المستدعي بين التعديل أو إنشاء قيمة جديدة.

struct Text {
    var value: String
    func uppercased() -> Text {
        return Text(value: value.uppercased())
    }
    mutating func uppercase() {
        value = value.uppercased()
    }
}
var t = Text(value: "hi")
let u = t.uppercased()
t.uppercase()
print(u.value, t.value)

تحقق سريع

اختبروا التصميم غير المُعدِّل.

مراجعة

بديلًا عن التعديل، يُرجع الأسلوب غير المُعدِّل قيمة جديدة بعد تطبيق التغيير عليها، مع إبقاء الأصل سليمًا وإمكانية استخدامه مع مثيلات let. ووفق اصطلاح Swift، تقترن الأسماء بصيغة الأمر (sort) بالأسماء المنتهية بـ -ed أو -ing (sorted).

let a = [3, 1, 2]
let b = a.sorted()
print(a, b)
البدء مجانًا

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

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

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

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

هل درس «البدائل غير المعدِّلة» مجاني؟

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

ماذا ستتعلم في «البدائل غير المعدِّلة»؟

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

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

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

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

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

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

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

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

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