Kelas Data di Kotlin

1. Ikhtisar

Bahasa Kotlin memperkenalkan konsep Kelas Data, yang mewakili kelas sederhana yang digunakan sebagai penampung data dan tidak merangkum logika tambahan apa pun. Sederhananya, solusi Kotlin memungkinkan kita menghindari penulisan banyak kode boilerplate.

Dalam artikel singkat ini, kita akan melihat Kelas Data di Kotlin dan membandingkannya dengan rekan Java-nya.

2. Penyiapan Kotlin

Untuk mulai menyiapkan proyek Kotlin, lihat pengantar kami untuk tutorial Bahasa Kotlin .

3. Kelas Data di Jawa

Jika kami ingin membuat entri Film di Java, kami perlu menulis banyak kode boilerplate:

public class Movie { private String name; private String studio; private float rating; public Movie(String name, String studio, float rating) { this.name = name; this.studio = studio; this.rating = rating; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getStudio() { return studio; } public void setStudio(String studio) { this.studio = studio; } public float getRating() { return rating; } public void setRating(float rating) { this.rating = rating; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + Float.floatToIntBits(rating); result = prime * result + ((studio == null) ? 0 : studio.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Movie other = (Movie) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (Float.floatToIntBits(rating) != Float.floatToIntBits(other.rating)) return false; if (studio == null) { if (other.studio != null) return false; } else if (!studio.equals(other.studio)) return false; return true; } @Override public String toString() { return "Movie [name=" + name + ", studio=" + studio + ", rating=" + rating + "]"; } }

86 baris kode. Itu banyak untuk menyimpan hanya tiga bidang dalam kelas sederhana.

4. Kelas Data Kotlin

Sekarang, kita akan membuat kelas Film yang sama , dengan fungsi yang sama, menggunakan Kotlin :

data class Movie(var name: String, var studio: String, var rating: Float)

Seperti yang bisa kita lihat, itu jauh lebih mudah dan lebih bersih. Constructor, toString (), equals (), hashCode (), dan fungsi copy () dan componentN () tambahan dibuat secara otomatis.

4.1. Pemakaian

Sebuah kelas data dibuat dengan cara yang sama seperti kelas lainnya:

val movie = Movie("Whiplash", "Sony Pictures", 8.5F)

Sekarang, properti dan fungsi tersedia:

println(movie.name) //Whiplash println(movie.studio) //Sony Pictures println(movie.rating) //8.5 movie.rating = 9F println(movie.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.0)

4.2. Fungsi Salin

Fungsi copy () dibuat, jika kita perlu menyalin objek yang mengubah beberapa propertinya tetapi menjaga sisanya tidak berubah.

val betterRating = movie.copy(rating = 9.5F) println(betterRating.toString()) // Movie(name=Whiplash, studio=Sony Pictures, rating=9.5) 

Java tidak menyediakan cara asli yang jelas untuk menyalin / mengkloning objek. Kita bisa menggunakan antarmuka Clonable , SerializationUtils.clone () atau konstruktor kloning .

4.3. Deklarasi Penghancuran

Deklarasi Destrukturisasi memungkinkan kita untuk memperlakukan properti objek sebagai nilai individual. Untuk setiap properti di kelas data keluar, sebuah componentN () dibuat:

movie.component1() // name movie.component2() // studio movie.component3() // rating

Kita juga dapat membuat banyak variabel dari objek atau langsung dari suatu fungsi - penting untuk diingat tentang penggunaan tanda kurung:

val(name, studio, rating) = movie fun getMovieInfo() = movie val(namef, studiof, ratingf) = getMovieInfo()

4.4. Persyaratan Kelas Data

Untuk membuat kelas data, kita harus memenuhi persyaratan berikut:

  • Konstruktor utama harus memiliki setidaknya satu parameter
  • Semua parameter konstruktor utama perlu ditandai sebagai val atau var
  • Kelas data tidak boleh abstrak, terbuka, tertutup atau dalam
  • (sebelum 1.1.) Kelas data hanya dapat mengimplementasikan antarmuka

Sejak 1.1, kelas data dapat memperluas kelas lain.

Jika kelas yang dihasilkan perlu memiliki konstruktor tanpa parameter, nilai default untuk semua properti harus ditentukan:

data class Movie(var name: String = "", var studio: String = "", var rating: Float = 0F)

5. Kesimpulan

Kami telah melihat Kelas Data di Kotlin, penggunaan dan persyaratannya, pengurangan jumlah kode boilerplate yang ditulis, dan perbandingan dengan kode yang sama di Java.

Jika Anda ingin mempelajari lebih lanjut tentang Kotlin, lihat artikel seperti Kotlin Java Interoperability dan Pengantar Bahasa Kotlin yang telah disebutkan .

Implementasi lengkap dari contoh-contoh ini dapat ditemukan di proyek GitHub kami.