0Pricing
Swift Academy · Pelajaran

Derivasi Hashable/Equatable/Comparable

Biarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum sederhana; implementasikan Comparable khusus (leksikografis) dan hash(into:) manual bila diperlukan.

Derivasi Hashable/Equatable/Comparable adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.

Apa yang dihasilkan otomatis?

Swift dapat menghasilkan secara otomatis kesesuaian umum untuk tipe sederhana:

  • Equatable: kesamaan nilai
  • Hashable: kunci kamus/kumpulan
  • Codable: penyandian/penguraian

Terapkan Comparable sendiri (secara leksikografis), atau manfaatkan urutan kasus enumerasi jika sesuai.

Sintesis untuk struktur

Untuk struktur yang properti tersimpannya bersifat Equatable/Hashable, Swift menghasilkan keduanya secara otomatis.

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)                // 1

Comparable untuk enumerasi

Enumerasi tanpa nilai terkait dapat memperoleh sintesis Comparable berdasarkan urutan kasus.

enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high)  // true

Comparable untuk struktur

Untuk struktur, tulis < secara manual. Perbandingan leksikografis sederhana (last, lalu first) umum digunakan.

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)

Kesamaan dan hashing khusus

Tulis == dan hash(into:) ketika kesamaan/hash harus mengabaikan pemformatan (misalnya, kapitalisasi dan spasi).

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

Praktik terbaik

Kiat:

  • Jaga konsistensi == dan hash(into:): nilai yang sama harus menghasilkan hash yang sama.
  • Utamakan sintesis terlebih dahulu; gunakan cara manual hanya untuk semantik khusus.
  • Dokumentasikan aturan pengurutan untuk Comparable.
  • Gunakan enumerasi tanpa muatan ketika skala berurutan sederhana sudah memadai.

Daftar periksa sintesis

Pemeriksaan singkat: Apa saja yang dapat dihasilkan Swift secara otomatis untuk struktur/enumerasi sederhana?

Ringkasan

Ringkasan: Biarkan Swift menghasilkan Equatable/Hashable (serta Codable) untuk model sederhana. Terapkan Comparable dengan aturan leksikografis yang jelas, atau manfaatkan urutan kasus enumerasi jika memungkinkan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Derivasi Hashable/Equatable/Comparable” gratis?

Ya — teks lengkap “Derivasi Hashable/Equatable/Comparable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Derivasi Hashable/Equatable/Comparable”?

Biarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum sederhana; implementasikan Comparable khusus (leksikografis) dan hash(into:) manual bila diperlukan. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Derivasi Hashable/Equatable/Comparable” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Overloading operator & kelompok precedence
  2. Subscript & indeks khusus, ditinjau kembali
  3. Derivasi Hashable/Equatable/Comparable
← Kembali ke Swift Academy