اشتقاقات Hashable/Equatable/Comparable
دع Swift تنشئ تلقائيًا تطبيقات Equatable وHashable (وCodable) للـStructs والـEnums البسيطة، وطبّق Comparable المخصّصًا (المعجمي) و hash(into:) يدويًا عند الحاجة.
اشتقاقات Hashable/Equatable/Comparable درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
ما الذي يُولَّد تلقائيًا؟
يمكن لـ Swift توليد التوافقات الشائعة تلقائيًا للأنواع البسيطة:
- Equatable: مساواة القيم
- Hashable: مفاتيح القواميس والمجموعات
- Codable: الترميز وفك الترميز
نفّذوا Comparable يدويًا باستخدام ترتيب معجمي، أو اعتمدوا على ترتيب حالات التعداد عندما يكون ذلك مناسبًا.
التوليد التلقائي للبنى
بالنسبة إلى البنى التي تكون خصائصها المخزّنة من النوعين Equatable أو Hashable، ينشئ Swift كليهما تلقائيًا.
struct Point: Equatable, Hashable {
var x: Int
var y: Int
// No extra code: Equatable & Hashable are synthesized
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
print(p1 == p2) // true
let set: Set<Point> = [p1, p2] // Hashable works; duplicates coalesce
print(set.count) // 1Comparable للتعدادات
يمكن أن يحصل تعداد من دون قيم مرتبطة على التوليد التلقائي لـ Comparable استنادًا إلى ترتيب الحالات.
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // trueComparable للبنى
بالنسبة إلى البنى، اكتبوا < يدويًا. وتُعدّ المقارنة المعجمية البسيطة، بدءًا من الخاصية الأخيرة ثم الأولى، شائعة الاستخدام.
struct Person: Comparable, Hashable {
let last: String
let first: String
static func < (lhs: Person, rhs: Person) -> Bool {
if lhs.last != rhs.last { return lhs.last < rhs.last }
return lhs.first < rhs.first
}
}
let a = Person(last: "Doe", first: "Ana")
let b = Person(last: "Doe", first: "Max")
print(a < b) // true (Ana before Max)المساواة والتجزئة المخصّصتان
اكتبوا == وhash(into:) عندما ينبغي للمساواة أو التجزئة تجاهل التنسيق، مثل حالة الأحرف والمسافات.
struct FileID: Hashable, Equatable {
let path: String
// Normalize case/trim when hashing & comparing
static func == (l: FileID, r: FileID) -> Bool {
l.path.lowercased().trimmingCharacters(in: .whitespaces) ==
r.path.lowercased().trimmingCharacters(in: .whitespaces)
}
func hash(into hasher: inout Hasher) {
hasher.combine(path.lowercased().trimmingCharacters(in: .whitespaces))
}
}
let f1 = FileID(path: " Readme.md ")
let f2 = FileID(path: "readme.md")
print(f1 == f2) // true
print(Set([f1, f2]).count) // 1أفضل الممارسات
نصائح:
- حافظوا على اتساق == وhash(into:): يجب أن تنتج القيم المتساوية تجزئة متساوية.
- فضّلوا التوليد التلقائي أولًا، ولا تلجؤوا إلى التنفيذ اليدوي إلا عند الحاجة إلى دلالات مخصّصة.
- وثّقوا قواعد الترتيب الخاصة بـ Comparable.
- استخدموا التعدادات من دون قيم مرفقة عندما يكون المقياس المرتّب البسيط مناسبًا.
قائمة التحقق من التوليد التلقائي
تحقق سريع: ما الذي يمكن لـ Swift توليده تلقائيًا للبنى والتعدادات البسيطة؟
الخلاصة
الخلاصة: اتركوا لـ Swift مهمة توليد Equatable/Hashable، وكذلك Codable، للنماذج البسيطة. نفّذوا Comparable بقواعد معجمية واضحة، أو اعتمدوا على ترتيب حالات التعداد متى أمكن.
الأسئلة الشائعة
هل درس «اشتقاقات Hashable/Equatable/Comparable» مجاني؟
نعم — نص درس «اشتقاقات Hashable/Equatable/Comparable» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «اشتقاقات Hashable/Equatable/Comparable»؟
دع Swift تنشئ تلقائيًا تطبيقات Equatable وHashable (وCodable) للـStructs والـEnums البسيطة، وطبّق Comparable المخصّصًا (المعجمي) و hash(into:) يدويًا عند الحاجة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «اشتقاقات Hashable/Equatable/Comparable»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التحميل الزائد على المعاملات ومجموعات الأولوية
- الرموز الفرعية والفهارس المخصّصة مجددًا
- اشتقاقات Hashable/Equatable/Comparable