Kotlin Academy · Pelajaran

copy dan equals

Fungsi yang dihasilkan

Pelajaran 2 dari 413 langkah

copy dan equals adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Fungsi yang Dihasilkan

Selain toString, kelas data menghasilkan fungsi kesetaraan, hashCode, dan copy.

Ketiganya membuat kelas data mudah dibandingkan dan disalin.

Kesetaraan Struktural

equals yang dihasilkan membandingkan objek berdasarkan nilai propertinya, bukan identitasnya.

Dua instans kelas data dengan nilai yang sama dianggap setara dengan ==.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 30)
    println(a == b)
}

Nilai yang Berbeda Tidak Setara

Ubah properti apa pun dan kedua objek tidak lagi setara.

Kesetaraan dihitung dari setiap properti dalam konstruktor utama.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 31)
    println(a == b)
}

Kesetaraan dan Identitas

Gunakan == untuk kesetaraan nilai (struktural) dan === untuk kesetaraan referensi (identitas).

Dua objek data yang setara dapat berupa instans yang berbeda di memori.

data class User(val name: String)

fun main() {
    val a = User("Alice")
    val b = User("Alice")
    println(a == b)  // values match
    println(a === b) // different instances
}

hashCode yang Konsisten

hashCode dihasilkan agar sesuai dengan equals: objek yang setara menghasilkan hash yang sama.

Inilah yang membuat kelas data bekerja dengan benar dalam himpunan dan sebagai kunci peta.

data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)
    println(a.hashCode() == b.hashCode())
}

Fungsi copy

copy membuat objek baru yang identik dengan objek asli.

Dengan properti val yang tidak dapat diubah, penyalinan adalah cara untuk membuat versi yang telah dimodifikasi.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy()
    println(b)
    println(a == b)
}

Menyalin dengan Perubahan

Berikan argumen bernama kepada copy untuk mengubah properti tertentu sambil mempertahankan properti lainnya.

Ini adalah pola standar untuk memperbarui data yang tidak dapat diubah.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val older = a.copy(age = 31)
    println(a)
    println(older)
}

copy Tidak Mengubah yang Asli

copy tidak pernah mengubah objek sumber. Objek asli mempertahankan nilainya.

Ketidakmampuan untuk berubah ini membuat perubahan status dapat diprediksi dan aman.

data class Account(val owner: String, val balance: Int)

fun main() {
    val original = Account("Sam", 100)
    val updated = original.copy(balance = 150)
    println(original.balance)
    println(updated.balance)
}

Merangkai Salinan

Karena copy mengembalikan objek baru, Anda dapat menerapkan beberapa pembaruan secara berurutan.

Setiap langkah menghasilkan nilai baru yang independen.

data class Config(val volume: Int, val muted: Boolean)

fun main() {
    val base = Config(50, false)
    val result = base.copy(volume = 70).copy(muted = true)
    println(result)
}

Hanya Properti Konstruktor yang Dihitung

Sama seperti kesetaraan, copy hanya menangani properti konstruktor utama.

Properti di dalam isi kelas akan diatur ulang ke nilai bawaannya dalam salinan, jadi simpan status penting di dalam konstruktor.

data class User(val name: String) {
    var note: String = "none"
}

fun main() {
    val a = User("Alice")
    a.note = "VIP"
    val b = a.copy()
    println(b.note) // back to default
}

Menggabungkan Semuanya

Fungsi yang dihasilkan memberikan kekuatan pada kelas data:

  • equals dan == membandingkan berdasarkan nilai
  • hashCode tetap konsisten dengan equals
  • copy menggandakan objek dengan perubahan opsional
data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy(name = "Alicia")
    println(a == b)
    println(b)
}

Pemeriksaan Cepat

Uji pemahaman Anda tentang copy dan equals.

Ringkasan

Anda telah mempelajari fungsi yang dihasilkan oleh kelas data:

  • Kesetaraan membandingkan berdasarkan nilai, == dibandingkan dengan ===
  • hashCode tetap konsisten untuk koleksi
  • copy menggandakan objek dengan perubahan tertentu

Selanjutnya Anda akan mempelajari cara destrukturisasi membongkar objek menjadi variabel.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “copy dan equals” gratis?

Ya — teks lengkap “copy dan equals” 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 “copy dan equals”?

Fungsi yang dihasilkan 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 2 dari 4.

Berapa lama pelajaran “copy dan equals” 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. Mendeklarasikan Kelas Data
  2. copy dan equals
  3. Deklarasi Destrukturisasi
  4. Kelas Data dalam Koleksi
← Kembali ke Kotlin Academy