0Pricing
Swift Academy · Ders

Ö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))  // true

Bü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"))  // true

Karmalanabilirliğ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)  // true

Toleranslı 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))  // true

Alanları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))  // true

Eş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 true

Set İç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)  // 1

Hı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

  1. Otomatik Oluşturulan Equatable
  2. Hashable ve hash(into:)
  3. Comparable ve Sıralama
  4. Özel Eşitlik Anlamı
← Swift Academy Sayfasına Dön