0Pricing
Swift Academy · درس

‏Equatable المُنشأ تلقائيًا

احصل على == تلقائيًا وخصّصه عند الحاجة.

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

ما هو Equatable؟

إنّ Equatable هو البروتوكول الذي يوفّر للنوع العامل ==. يتيح الالتزام به مقارنة قيمتين للتحقق من تساويهما، واستخدامهما مع contains وfirstIndex وغيرهما.

الالتزام التلقائي

بالنسبة إلى بنية تكون جميع خصائصها المخزنة من النوع Equatable، ينشئ Swift العامل == تلقائيًا نيابةً عنك — ما عليك سوى التصريح بالالتزام:

struct Point: Equatable {
    let x: Int
    let y: Int
}
print(Point(x: 1, y: 2) == Point(x: 1, y: 2))  // true
print(Point(x: 1, y: 2) == Point(x: 9, y: 2))  // false

آلية الإنشاء التلقائي

يقارن العامل == المُنشأ كل زوج من الخصائص المخزنة. ويجب أن تكون جميعها متساوية حتى تتساوى القيمتان:

struct User: Equatable {
    let name: String
    let age: Int
}
let a = User(name: "Ann", age: 30)
let b = User(name: "Ann", age: 31)
print(a == b)  // false  (age differs)

استخدام == مع المجموعات

يتيح Equatable العديد من العمليات على المصفوفات:

struct Tag: Equatable { let name: String }
let tags = [Tag(name: "a"), Tag(name: "b")]
print(tags.contains(Tag(name: "b")))        // true
print(tags.firstIndex(of: Tag(name: "a"))!) // 0

التعدادات أيضًا من نوع Equatable

تحصل التعدادات أيضًا على Equatable مُنشأ تلقائيًا. تكون التعدادات التي لا تحتوي على قيم مرتبطة من نوع Equatable حتى من دون التصريح بذلك؛ أما التعدادات ذات القيم المرتبطة، فعليك التصريح بالالتزام، وستتم مقارنة القيم المرتبطة أيضًا.

تعداد Equatable بقيم مرتبطة

تشارك القيم المرتبطة في المقارنة:

enum Status: Equatable {
    case active
    case error(code: Int)
}
print(Status.error(code: 404) == Status.error(code: 404))  // true
print(Status.error(code: 404) == Status.error(code: 500))  // false

الأنواع المتداخلة

يعمل الإنشاء التلقائي بشكل تركيبي: يمكن إنشاء بنية تحتوي على أعضاء من نوع Equatable تلقائيًا:

struct Line: Equatable {
    let start: Int
    let end: Int
}
struct Shape: Equatable {
    let lines: [Line]
}
print(Shape(lines: [Line(start: 0, end: 1)]) == Shape(lines: [Line(start: 0, end: 1)]))  // true

متى يفشل الإنشاء التلقائي

إذا لم تكن أي خاصية مخزنة من النوع Equatable، فلن يتوفر الإنشاء التلقائي، وسيتعين عليك كتابة == بنفسك (وسنتناول ذلك لاحقًا):

struct Box: Equatable {
    let id: Int
    static func == (l: Box, r: Box) -> Bool { l.id == r.id }
}
print(Box(id: 1) == Box(id: 1))  // true

الفئات لا تحصل على الإنشاء التلقائي

لا تحصل الأنواع المرجعية على == مُنشأ تلقائيًا؛ بل يجب عليك تنفيذه بنفسك (بمقارنة الهوية أو الحقول):

final class Account: Equatable {
    let id: Int
    init(id: Int) { self.id = id }
    static func == (l: Account, r: Account) -> Bool { l.id == r.id }
}
print(Account(id: 7) == Account(id: 7))  // true

يأتي != تلقائيًا

بمجرد وجود ==، يُشتق != تلقائيًا باعتباره نفيًا له:

struct Color: Equatable { let hex: String }
print(Color(hex: "#fff") != Color(hex: "#000"))  // true

Equatable في التعليمات البرمجية العامة

يتيح Equatable للدوال العامة مقارنة العناصر — إذ تتطلبه خوارزميات كثيرة:

func allSame<T: Equatable>(_ xs: [T]) -> Bool {
    guard let first = xs.first else { return true }
    return xs.allSatisfy { $0 == first }
}
print(allSame([2, 2, 2]))  // true
print(allSame(["a", "b"]))  // false

تحقق سريع

لأي نوع ينشئ Swift العامل == تلقائيًا عند التصريح عن Equatable؟

مراجعة

لقد تعلمتم Equatable:

  • يوفّر Equatable العامل == (والعامل != مجانًا)
  • تحصل البنى والتعدادات ذات الأعضاء من نوع Equatable على == مُنشأ تلقائيًا
  • يتيح استخدام contains وfirstIndex(of:) وغيرهما
  • تتطلب الفئات والأعضاء غير المنتمين إلى Equatable كتابة == يدويًا

التالي: Hashable.

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

هل درس «‏Equatable المُنشأ تلقائيًا» مجاني؟

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

ماذا ستتعلم في «‏Equatable المُنشأ تلقائيًا»؟

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

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

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

كم من الوقت يستغرق درس «‏Equatable المُنشأ تلقائيًا»؟

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

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

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

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

  1. ‏Equatable المُنشأ تلقائيًا
  2. ‏Hashable و hash(into:)
  3. ‏Comparable والترتيب
  4. دلالات المساواة المخصصة
← العودة إلى Swift Academy