Özel Eşitlik Anlamı
Alanınıza uygun eşitlik kurallarını uygulayın.
Özel Eşitlik Anlamı, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Varsayılan == Yanlış Olduğunda
Otomatik oluşturulan ==, saklanan her özelliği karşılaştırır. Bazen bu fazla katıdır (yalnızca bir kimlikle ilgilenirsiniz) veya fazla gevşektir. Bu durumda == operatörünü kendiniz yazarsınız.
Kimliğe Dayalı Eşitlik
Diğer alanları yok sayarak, kimlikleri eşleştiğinde iki kaydı eşit kabul edin:
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)) // trueBüyük-Küçük Harfe Duyarsız Eşitlik
Karşılaştırmadan önce normalleştirin:
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")) // trueKarmalanabilirliği Tutarlı Tutma
== operatörünü özelleştirirseniz, aynı alanları kullanması için hash(into:) işlevini de MUST güncelleyin; aksi hâlde eşit değerler farklı şekilde karmalanabilir ve kümeleri bozabilir.
== ve hash(into:) Uyumunu Sağlama
Her ikisi de yalnızca id kullanarak tutarlılığı korur:
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Önbelleği Yok Sayan Eşitlik
Türetilmiş veya önbelleğe alınmış alanları karşılaştırmanın dışında bırakın:
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) // trueToleranslı Ondalık Sayı Eşitliği
Double değerlerini tam olarak değil, bir epsilon aralığı içinde karşılaştırın:
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)) // trueAlanların Bir Alt Kümesine Göre Eşitlik
Alanlara dayalı eşitlik için anlamlı bir alt kümeyi karşılaştırın:
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)) // trueEşitlenebilirlik Kurallarına Uyun
Özel == operatörü kendine göreli (a == a), simetrik (a == b ise b == a) ve geçişli kalmalıdır. Bu kuralları ihlal etmek, koleksiyonların ve algoritmaların kafasını karıştırır.
Simetrik Bir Uygulama
Normalleştirilmiş biçimleri karşılaştırmak simetriyi korur:
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 trueSet İçinde Özel Eşitlik
Kimlik temelli eşitlik ve karma işlemi birbiriyle uyumlu olduğundan, Set aynı kimliğe sahip değerleri tek bir değer olarak ele alır:
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) // 1Hızlı Kontrol
Yalnızca bazı alanları kullanan özel bir == yazdıktan sonra başka ne yapmanız gerekir?
Özet
Özel eşitliği öğrendiniz:
- Varsayılan tüm yapı karşılaştırması yanlış olduğunda kendi
==operatörünüzü yazın - Yaygın durumlar: yalnızca kimlik, büyük-küçük harfe duyarsızlık, epsilon aralığındaki kayan noktalı sayılar ve önbellekleri yok sayma
hash(into:)işlevini aynı alanlarla tutarlı tutun- Kendine göreli, simetrik ve geçişli kalın
Kurs tamamlandı! Sıradaki konu: CustomStringConvertible ve Mirror.
Sıkça Sorulan Sorular
“Özel Eşitlik Anlamı” dersi ücretsiz mi?
Evet — “Özel Eşitlik Anlamı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Özel Eşitlik Anlamı” dersinde ne öğreneceğim?
Alanınıza uygun eşitlik kurallarını uygulayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özel Eşitlik Anlamı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Otomatik Oluşturulan Equatable
- Hashable ve hash(into:)
- Comparable ve Sıralama
- Özel Eşitlik Anlamı