0Pricing
Swift Academy · Pelajaran

Overloading operator & kelompok precedence

Lakukan overload operator bawaan untuk tipe Anda dan definisikan precedence groups agar ekspresi diurai sesuai maksud. Pertahankan desain tetap minimal dan mudah diprediksi.

Overloading operator & kelompok precedence adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Mengapa menyesuaikan operator?

Swift memungkinkan Anda membebani operator untuk tipe Anda dan membuat operator baru. Gunakan secukupnya: utamakan kejelasan, dokumentasikan perilakunya, dan tentukan prioritas agar tidak terjadi kejutan.

Membebani operator bawaan

Bebani operator yang sudah ada dengan menulis fungsi bebas menggunakan simbol yang sama dan tipe Anda. Pertahankan semantik yang dapat diprediksi (misalnya, + menjumlahkan nilai).

struct Vector2D: CustomStringConvertible, Equatable {
    var x: Double
    var y: Double
    var description: String { "(\(x), \(y))" }
}
func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
    Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
func == (lhs: Vector2D, rhs: Vector2D) -> Bool {
    lhs.x == rhs.x && lhs.y == rhs.y
}
let a = Vector2D(x: 1, y: 2)
let b = Vector2D(x: 3, y: 4)
let c = a + b
print(c)     // (4.0, 6.0)

Operator khusus dan prioritas

Deklarasikan precedencegroup dan kaitkan dengan operator Anda. Asosiativitas kanan membuat 2 ** 3 ** 2 diuraikan sebagai 2 ** (3 ** 2).

// Define power operator ** with right-associative precedence
precedencegroup PowerPrecedence {
    higherThan: MultiplicationPrecedence
    associativity: right
}
infix operator ** : PowerPrecedence

// Simple integer exponent (education-only; no overflow checks)
func ** (base: Int, exp: Int) -> Int {
    guard exp >= 0 else { return 0 }   // keep it simple for demo
    if exp == 0 { return 1 }
    var result = 1
    for _ in 0..<exp { result *= base }
    return result
}
print(2 ** 3)          // 8
print(2 ** 3 ** 2)     // 2 ** (3 ** 2) = 2 ** 9 = 512 (right-assoc)

Operator awalan/akhiran

Anda dapat mendefinisikan operator prefix/postfix. Gunakan operator ini hanya untuk ranah yang jelas seperti matematika; hindari makna yang dapat mengejutkan.

prefix operator √
prefix func √ (x: Double) -> Double { x.squareRoot() }

postfix operator !
postfix func ! (x: Bool) -> Bool { !x }  // purely demo; avoid confusing overrides

print(√9)     // 3.0
print(true!)  // false (demo only — don't ship this)

Prioritas dalam praktik

Atur prioritas dengan cermat relatif terhadap operator bawaan (misalnya, MultiplicationPrecedence). Uji ekspresi untuk memastikan keterbacaan dan maksudnya.

// Demonstrate how precedence affects parsing
// Our PowerPrecedence is higher than Multiplication.
// So this parses as: 2 * (3 ** 2) = 18
let r1 = 2 * 3 ** 2
print(r1)

// Compare if we had lower precedence (hypothetical):
// Then it would parse as (2 * 3) ** 2 = 36

Praktik terbaik

Pedoman:

  • Utamakan metode untuk tindakan nonstandar; gunakan operator hanya untuk operasi matematika/bit yang sudah umum.
  • Sesuaikan dengan ekspektasi pengguna (+ menjumlahkan, * mengalikan).
  • Dokumentasikan operator khusus dan batasi jumlahnya.
  • Tentukan prioritas dan asosiativitas agar penguraian tidak ambigu.

Mendeklarasikan operator dengan benar

Pemeriksaan singkat: Manakah cara yang benar untuk menambahkan operator baru dengan kelompok prioritas?

Ringkasan

Ringkasan: Lakukan pembebanan berlebih pada operator hanya ketika semantiknya jelas; tentukan kelompok prioritas dan asosiativitas untuk mengendalikan penguraian; uji ekspresi agar tetap jelas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Overloading operator & kelompok precedence” gratis?

Ya — teks lengkap “Overloading operator & kelompok precedence” 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 “Overloading operator & kelompok precedence”?

Lakukan overload operator bawaan untuk tipe Anda dan definisikan precedence groups agar ekspresi diurai sesuai maksud. Pertahankan desain tetap minimal dan mudah diprediksi. 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 1 dari 3.

Berapa lama pelajaran “Overloading operator & kelompok precedence” 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