Data class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 32 dari 57.
data class adalah class yang tugas utamanya menyimpan data. Modifier data membuat compiler menghasilkan toString(), equals(), hashCode(), copy() dan componentN() dari property konstruktor utama:
data class Point(val x: Int, val y: Int)Di dalam main:
val a = Point(1, 2)
val b = Point(1, 2)
println(a)
println(a == b)
println(setOf(a, b).size)Output:
Point(x=1, y=2)
true
1Tanpa data, println menampilkan nama class dan kode hash seperti Point@1b6d3586, dan dua object dengan nilai yang sama tidak dianggap setara. copy() membuat object baru dengan beberapa property yang diubah dan membiarkan object asli tetap seperti semula, sehingga data class dengan property val berfungsi sebagai nilai yang tidak dapat diubah:
data class User(val name: String, val email: String, val admin: Boolean = false)Di dalam main:
val ada = User("Ada", "ada@example.com")
val boss = ada.copy(admin = true)
println(ada)
println(boss)
println(ada == boss)Output:
User(name=Ada, email=ada@example.com, admin=false)
User(name=Ada, email=ada@example.com, admin=true)
falseDeklarasi destructuring membongkar object menjadi beberapa variabel: val (x, y) = point memanggil component1() dan component2() yang dihasilkan, sesuai urutan constructor. Fitur ini juga berfungsi dalam for loop dan parameter lambda, sedangkan _ melewati sebuah property:
data class Score(val player: String, val points: Int, val level: Int)Di dalam main:
val scores = listOf(Score("ada", 120, 3), Score("bo", 95, 2))
for ((player, points) in scores) println("$player: $points")
val (_, bestPoints, bestLevel) = scores.maxBy { it.points }
println("best: $bestPoints at level $bestLevel")Output:
ada: 120
bo: 95
best: 120 at level 3Hanya property konstruktor utama yang disertakan: property yang dideklarasikan di dalam badan class tidak disertakan dalam toString, equals, hashCode, dan copy. Data class memerlukan setidaknya satu parameter konstruktor, dan setiap parameter harus berupa val atau var:
data class Reading(val sensor: String, val value: Int) {
var note = ""
}Di dalam main:
val r1 = Reading("t1", 20)
val r2 = Reading("t1", 20)
r1.note = "checked"
println(r1)
println(r1 == r2)Output:
Reading(sensor=t1, value=20)
trueTantangan
MudahJadikan Book sebagai data class agar pencetakan dan perbandingannya berdasarkan nilai. Lalu lengkapi tiga fungsi: parse(line) mengubah Dune;Herbert;1965 menjadi Book, newEdition(book, year) mengembalikan salinan dengan tahun baru dan (new edition) ditambahkan ke judul, dan describe(book) mengembalikan Dune by Herbert, 1965 menggunakan deklarasi destrukturisasi.
Kode yang disediakan mengurai setiap baris input, mencetak setiap buku, jumlah duplikat, edisi baru dari buku pertama (tahun 2024), dan deskripsi setiap buku yang berbeda.
Tulis kodemu di Book.kt dan BookTools.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
val input = generateSequence(::readLine).toList()
val books = input.map { parse(it) }
for (b in books) println(b)
println("duplicates: ${books.size - books.distinct().size}")
println(newEdition(books[0], 2024))
for (b in books.distinct()) println(describe(b))
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin