Swift Academy · पाठ

कस्टम समानता का अर्थ

डोमेन के अनुरूप समानता के नियम लागू कीजिए।

पाठ 4, कुल 4 में से13 चरण

कस्टम समानता का अर्थ, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

डिफ़ॉल्ट == कब गलत होता है

संश्लेषित == हर संग्रहीत गुणधर्म की तुलना करता है। कभी-कभी यह बहुत सख्त होता है (आपको केवल पहचानकर्ता की परवाह होती है) या बहुत ढीला। तब आपको == स्वयं लिखना पड़ता है।

पहचान-आधारित समानता

जब दो रिकॉर्ड के पहचानकर्ता समान हों, तो अन्य फ़ील्ड को अनदेखा करके उन्हें समान मानें:

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

अक्षर-रूप से स्वतंत्र समानता

तुलना करने से पहले मानों को सामान्यीकृत करें:

struct Username: Equatable {
    let raw: String
    static func == (l: Username, r: Username) -> Bool {
        l.raw.lowercased() == r.raw.lowercased()
    }
}
print(Username(raw: "Ann") == Username(raw: "ANN"))  // true

Hashable को संगत रखें

यदि आप == को अनुकूलित करते हैं, तो समान फ़ील्ड का उपयोग करने के लिए hash(into:) को भी MUST अपडेट करें, वरना समान मानों के हैश अलग हो सकते हैं और सेट टूट सकते हैं।

== और hash(into:) का मिलान

दोनों केवल id का उपयोग करते हैं, इसलिए संगत रहते हैं:

struct User: Hashable {
    let id: Int
    var name: String
    static func == (l: User, r: User) -> Bool { l.id == r.id }
    func hash(into h: inout Hasher) { h.combine(id) }
}
print(Set([User(id: 1, name: "A"), User(id: 1, name: "B")]).count)  // 1

कैश को अनदेखा करने वाली समानता

व्युत्पन्न या कैश किए गए फ़ील्ड को तुलना से बाहर रखें:

struct Doc: Equatable {
    let text: String
    var cachedWordCount: Int
    static func == (l: Doc, r: Doc) -> Bool { l.text == r.text }
}
let a = Doc(text: "hi", cachedWordCount: 1)
let b = Doc(text: "hi", cachedWordCount: 999)
print(a == b)  // true

सहनशील फ़्लोटिंग-पॉइंट समानता

डबल मानों की सटीक तुलना करने के बजाय, एप्सिलॉन के भीतर उनकी तुलना करें:

struct Measure: Equatable {
    let value: Double
    static func == (l: Measure, r: Measure) -> Bool {
        abs(l.value - r.value) < 0.0001
    }
}
print(Measure(value: 0.1 + 0.2) == Measure(value: 0.3))  // true

फ़ील्ड के उपसमुच्चय में समानता

डोमेन की समानता के लिए अर्थपूर्ण फ़ील्ड के उपसमुच्चय की तुलना करें:

struct Card: Equatable {
    let rank: Int
    let suit: String
    let isFaceUp: Bool   // display state, not identity
    static func == (l: Card, r: Card) -> Bool {
        l.rank == r.rank && l.suit == r.suit
    }
}
print(Card(rank: 1, suit: "H", isFaceUp: true) == Card(rank: 1, suit: "H", isFaceUp: false))  // true

Equatable के नियमों का पालन करें

अनुकूलित == को आत्म-प्रतिवर्ती (a == a), सममित (a == b से b == a का तात्पर्य) और संक्रामक रहना चाहिए। इनका उल्लंघन संग्रहों और एल्गोरिदम को भ्रमित करता है।

एक सममित कार्यान्वयन

सामान्यीकृत रूपों की तुलना करने से सममिति बनी रहती है:

struct Email: Equatable {
    let address: String
    static func == (l: Email, r: Email) -> Bool {
        l.address.lowercased() == r.address.lowercased()
    }
}
let x = Email(address: "A@x.com")
let y = Email(address: "a@X.com")
print(x == y, y == x)  // true true

Set में अनुकूलित समानता

क्योंकि केवल id वाली समानता और हैशिंग एक-दूसरे से सहमत हैं, इसलिए Set समान id वाले मानों को एक ही मानता है:

struct Item: Hashable {
    let id: Int
    var note: String
    static func == (l: Item, r: Item) -> Bool { l.id == r.id }
    func hash(into h: inout Hasher) { h.combine(id) }
}
let s: Set<Item> = [Item(id: 1, note: "x"), Item(id: 1, note: "y")]
print(s.count)  // 1

त्वरित जाँच

कुछ ही फ़ील्ड का उपयोग करने वाला अनुकूलित == लिखने के बाद आपको और क्या करना चाहिए?

पुनरावलोकन

आपने अनुकूलित समानता सीखी:

  • जब डिफ़ॉल्ट संपूर्ण-संरचना तुलना गलत हो, तब अपना == लिखें
  • सामान्य मामले: केवल id, अक्षर-रूप से स्वतंत्र तुलना, एप्सिलॉन वाले फ़्लोट, कैश को अनदेखा करना
  • उन्हीं फ़ील्ड के साथ hash(into:) को संगत रखें
  • आत्म-प्रतिवर्ती, सममित और संक्रामक रहें

पाठ्यक्रम पूरा हुआ! अगला विषय: CustomStringConvertible और Mirror।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम समानता का अर्थ” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम समानता का अर्थ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम समानता का अर्थ” में मैं क्या सीखूँगा?

डोमेन के अनुरूप समानता के नियम लागू कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“कस्टम समानता का अर्थ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. संश्लेषित Equatable
  2. Hashable और hash(into:)
  3. Comparable और क्रमबद्ध करना
  4. कस्टम समानता का अर्थ
← Swift Academy पर वापस जाएँ