0Pricing
Kotlin Academy · Pelajaran

Praktik Terbaik

Pertahankan operator agar intuitif

Praktik Terbaik adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. 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 Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Pertahankan Operator Tetap Intuitif

Definisikan ulang operator hanya jika maknanya jelas. + pada vektor mudah dipahami; + yang berarti mengirim email tidak demikian.

data class Vec(val x: Int, val y: Int) {
    operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}

fun main() {
    println(Vec(1, 2) + Vec(3, 4))
}

Pertahankan Semantik yang Diharapkan

Patuhi aljabar yang umum: a + b seharusnya terasa komutatif untuk tipe yang simetris dan tidak mengejutkan pembaca.

data class Money(val cents: Int) {
    operator fun plus(o: Money) = Money(cents + o.cents)
}

fun main() {
    println(Money(100) + Money(50))
}

Utamakan Kekekalan

Operator seperti plus sebaiknya mengembalikan nilai baru, bukan mengubah penerima, agar sesuai dengan perilaku bilangan.

data class Point(val x: Int) {
    operator fun plus(o: Point) = Point(x + o.x)
}

fun main() {
    val a = Point(1)
    val b = a + Point(2)
    println("${a.x} ${b.x}")
}

plus dan plusAssign

Definisikan plus untuk nilai yang tidak dapat diubah; definisikan plusAssign untuk perubahan langsung pada kontainer yang dapat diubah. Hindari mendefinisikan keduanya dengan perilaku yang bertentangan.

class Cart {
    val items = mutableListOf<String>()
    operator fun plusAssign(item: String) { items.add(item) }
}

fun main() {
    val c = Cart()
    c += "book"
    println(c.items)
}

Sesuaikan Tipe Hasil

Kembalikan tipe yang sama dari operator biner agar hasil dapat dirangkai secara alami.

data class N(val v: Int) {
    operator fun plus(o: N) = N(v + o.v)
}

fun main() {
    println((N(1) + N(2) + N(3)).v)
}

Jangan Mendefinisikan Ulang Operator demi Kecerdikan

Jika fungsi bernama lebih mudah dibaca, gunakanlah. Operator ditujukan untuk semantik yang benar-benar bersifat numerik atau seperti kontainer, bukan teka-teki.

data class Log(val lines: List<String>) {
    fun append(line: String) = Log(lines + line)
}

fun main() {
    println(Log(emptyList()).append("start").lines)
}

Jaga Konsistensi equals dan hashCode

Jika Anda mendefinisikan ulang perbandingan atau kesetaraan, selaraskan equals dan hashCode agar koleksi tidak rusak.

data class Id(val v: Int)

fun main() {
    val set = hashSetOf(Id(1), Id(1))
    println(set.size)
}

Perhatikan Prioritas Operator

Operator yang didefinisikan ulang tetap menggunakan prioritas bawaan. Rancanglah agar prioritas alami menghasilkan hasil yang diharapkan.

data class N(val v: Int) {
    operator fun plus(o: N) = N(v + o.v)
    operator fun times(o: N) = N(v * o.v)
}

fun main() {
    println((N(2) + N(3) * N(4)).v)
}

Dokumentasikan Operator yang Mengejutkan

Jika operator melakukan sesuatu yang tidak jelas, tambahkan komentar atau KDoc agar pemanggil tidak salah memahami perilakunya.

data class Range2(val start: Int, val end: Int) {
    // contains: is value inside the range?
    operator fun contains(v: Int) = v in start..end
}

fun main() {
    println(5 in Range2(1, 10))
}

Gunakan contains untuk in

Operator in dipetakan ke contains. Ambil alih operator tersebut hanya jika keanggotaan terdefinisi dengan baik untuk tipe Anda.

class Team(val members: List<String>) {
    operator fun contains(name: String) = name in members
}

fun main() {
    val t = Team(listOf("Ann", "Bo"))
    println("Ann" in t)
}

Jika Ragu, Gunakan Fungsi

Metode dengan nama yang jelas hampir selalu lebih aman daripada operator yang tidak lazim. Batasi pendefinisian ulang operator pada situasi yang benar-benar meningkatkan keterbacaan.

data class Temperature(val c: Int) {
    fun warmerThan(o: Temperature) = c > o.c
}

fun main() {
    println(Temperature(30).warmerThan(Temperature(20)))
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang praktik terbaik pendefinisian ulang operator.

Rangkuman

Anda telah mempelajari praktik terbaik pendefinisian ulang operator:

  • Definisikan ulang operator hanya jika maknanya jelas dan konvensional.
  • Utamakan hasil yang tidak dapat diubah dan bertipe sama; pertahankan agar hasil dapat dirangkai.
  • Pisahkan plus (nilai) dari plusAssign (perubahan).
  • Jaga konsistensi equals/hashCode; gunakan fungsi bernama jika lebih jelas.
data class V(val x: Int) {
    operator fun plus(o: V) = V(x + o.x)
}

fun main() {
    println((V(2) + V(5)).x)
}

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Praktik Terbaik” gratis?

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

Apa yang akan aku pelajari di “Praktik Terbaik”?

Pertahankan operator agar intuitif Kamu berlatih Kotlin 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 Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin 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 4 dari 4.

Berapa lama pelajaran “Praktik Terbaik” 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 Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin 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. Fungsi Operator
  2. Operator Perbandingan
  3. Indeks dan Invoke
  4. Praktik Terbaik
← Kembali ke Kotlin Academy