copy dan equals
Fungsi yang dihasilkan
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:
equalsdan==membandingkan berdasarkan nilaihashCodetetap konsisten dengan equalscopymenggandakan 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.
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.