Pada artikel ini, Anda akan belajar membuat kelas data di Kotlin. Anda juga akan belajar tentang persyaratan yang harus dipenuhi oleh kelas data, dan fungsi standarnya.
Mungkin ada situasi di mana Anda perlu membuat kelas hanya untuk menyimpan data. Dalam kasus seperti itu, Anda dapat menandai kelas sebagai data
untuk membuat kelas data. Sebagai contoh,
data class Person (nama val: String, var age: Int)
Untuk kelas ini, kompilator secara otomatis menghasilkan:
copy()
fungsi,equals()
danhashCode()
pasangan, dantoString()
bentuk konstruktor utamacomponentN()
fungsi
Sebelum membahas fitur-fitur ini secara mendetail, mari kita bicara tentang persyaratan yang harus dipenuhi oleh kelas data.
Persyaratan Kelas Data Kotlin
Berikut persyaratannya:
- Konstruktor utama harus memiliki setidaknya satu parameter.
- Parameter konstruktor utama harus ditandai sebagai
val
(hanya baca) atauvar
(baca-tulis). - Kelas tidak bisa terbuka, abstrak, batin atau tertutup.
- Kelas dapat memperluas kelas lain atau mengimplementasikan antarmuka. Jika Anda menggunakan Kotlin versi sebelum 1.1, kelas tersebut hanya dapat mengimplementasikan antarmuka.
Contoh: Kelas Data Kotlin
data class User(val name: String, val age: Int) fun main(args: Array) ( val jack = User("jack", 29) println("name = $(jack.name)") println("age = $(jack.age)") )
Saat Anda menjalankan program, hasilnya adalah:
nama = usia jack = 29
Ketika Anda mendeklarasikan kelas data, compiler secara otomatis menghasilkan beberapa fungsi seperti toString()
, equals()
, hashcode()
dll belakang layar. Ini membantu membuat kode Anda tetap ringkas. Seandainya Anda menggunakan Java, Anda akan perlu menulis banyak kode boilerplate.
Mari gunakan fungsi-fungsi ini:
Penyalinan
Untuk kelas data, Anda dapat membuat salinan objek dengan beberapa propertinya berbeda menggunakan copy()
fungsi. Begini cara kerjanya:
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = $(u1.name), name = $(u1.age)") println("u2: name = $(u2.name), name = $(u2.age)") )
Saat Anda menjalankan program, hasilnya adalah:
u1: nama = Yohanes, nama = 29 u2: nama = Randy, nama = 29
toString ()
Fungsi toString () mengembalikan representasi string dari objek.
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )
Saat Anda menjalankan program, hasilnya adalah:
Pengguna (nama = John, usia = 29)
hashCode () dan sama dengan ()
The hasCode()
kembali metode kode hash untuk objek. Jika dua objek sama, hashCode()
menghasilkan hasil bilangan bulat yang sama. Bacaan yang Direkomendasikan: hashCode ()
The equals()
pengembalian true
jika dua benda yang sama (memiliki yang sama hashCode()
). Jika objek tidak sama, equals()
kembalikan false
. Bacaan yang Direkomendasikan: equals ()
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = $(u1.hashCode())") println("u2 hashcode = $(u2.hashCode())") println("u3 hashcode = $(u3.hashCode())") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") )
Saat Anda menjalankan program, hasilnya adalah:
kode hash u1 = 71750738 kode hash u2 = 71750738 kode hash u3 = 771732263 u1 sama dengan u2. u1 tidak sama dengan u3.
Deklarasi Penghancuran
Anda dapat merusak sebuah objek menjadi sejumlah variabel menggunakan deklarasi destructing. Sebagai contoh:
data class Pengguna (nama val: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )
Saat Anda menjalankan program, hasilnya adalah:
nama = John usia = 29 jenis kelamin = Laki-laki
Ini dimungkinkan karena kompilator menghasilkan componentN()
fungsi semua properti untuk kelas data. Sebagai contoh:
data class User(val name: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" )
Saat Anda menjalankan program, hasilnya adalah:
Yohanes 29 Pria