Kelas Data Kotlin

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 datauntuk membuat kelas data. Sebagai contoh,

 data class Person (nama val: String, var age: Int)

Untuk kelas ini, kompilator secara otomatis menghasilkan:

  • copy()fungsi, equals()dan hashCode()pasangan, dan toString()bentuk konstruktor utama
  • componentN() 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) atau var(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 truejika 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

Artikel yang menarik...