Kotlin Academy · Pelajaran

Asas Data Class: Kaedah Dijana Automatik

Fahami perkara yang dijana oleh data class: equals, hashCode, toString dan copy.

Pelajaran 1 daripada 413 langkah

Asas Data Class: Kaedah Dijana Automatik ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah Itu Kelas Data?

Kelas data ialah kelas yang tujuan utamanya adalah untuk menyimpan nilai. Pengkompil Kotlin menjana equals, hashCode, toString, copy dan fungsi componentN secara automatik untuk anda.

Mengisytiharkan Kelas Data

Letakkan data di hadapan kelas biasa. Semua parameter pembina utama mestilah val atau var.

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

toString Dijana Secara Automatik

Pengkompil mencipta toString yang menyenaraikan setiap sifat mengikut nama.

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

equals Dijana Secara Automatik

equals membandingkan semua nilai sifat — dua tika dengan medan yang sama adalah sama tanpa mengira identiti rujukannya.

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

hashCode Dijana Secara Automatik

hashCode konsisten dengan equals: objek yang sama menghasilkan cincangan yang sama, jadi kelas data berfungsi dengan betul dalam himpunan dan sebagai kunci peta.

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

copy Dijana Secara Automatik

copy() mencipta tika baharu dengan nilai medan yang sama, sambil membenarkan penggantian setiap medan melalui argumen bernama.

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

componentN Dijana Secara Automatik

Setiap sifat mendapat fungsi componentN() (component1, component2, ...) yang membolehkan pengisihan struktur.

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

Perkara yang Tidak Dilakukan oleh Kelas Data

Kelas data tidak menjana toString untuk medan yang diwarisi, bersifat final secara lalai, dan tidak boleh menjadi abstract, open, sealed atau inner.

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

Sifat di Luar Pembina Utama

Sifat yang diisytiharkan dalam badan kelas TIDAK terlibat dalam equals, hashCode, toString atau copy.

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

Nilai Lalai

Gabungkan data class dengan parameter lalai untuk pembinaan yang fleksibel.

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

Praktikal: Kelas DTO

Kelas data amat sesuai untuk DTO, respons API dan objek nilai.

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

Semakan Pantas

Kaedah manakah yang TIDAK dijana secara automatik oleh pengkompil Kotlin untuk kelas data?

Rumusan

data class menjana equals, hashCode, toString, copy dan componentN secara automatik daripada sifat pembina utamanya. Sifat di luar pembina tidak disertakan. Gunakan kelas data untuk DTO, objek nilai dan apa-apa bekas nilai berkaitan.

Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Asas Data Class: Kaedah Dijana Automatik” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Asas Data Class: Kaedah Dijana Automatik”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Asas Data Class: Kaedah Dijana Automatik”?

Fahami perkara yang dijana oleh data class: equals, hashCode, toString dan copy. Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Asas Data Class: Kaedah Dijana Automatik” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas Data Class: Kaedah Dijana Automatik
  2. Menyalin dengan copy() dan Penggantian Separa
  3. Pengisytiharan Nyahstruktur dengan componentN
  4. Data Class dalam Koleksi dan sebagai Kunci Map
← Kembali ke Kotlin Academy