Lớp dữ liệu Kotlin

Trong bài này, bạn sẽ học cách tạo các lớp dữ liệu trong Kotlin. Bạn cũng sẽ tìm hiểu về các yêu cầu mà lớp dữ liệu phải đáp ứng và các chức năng tiêu chuẩn của chúng.

Có thể nảy sinh một tình huống mà bạn chỉ cần tạo một lớp để lưu giữ dữ liệu. Trong những trường hợp như vậy, bạn có thể đánh dấu lớp là datađể tạo lớp dữ liệu. Ví dụ,

 lớp dữ liệu Person (val name: String, var age: Int)

Đối với lớp này, trình biên dịch tự động tạo:

  • copy()hàm equals()hashCode()cặp, và toString()dạng của hàm tạo chính
  • componentN() chức năng

Trước khi nói chi tiết về các tính năng này, chúng ta hãy nói về các yêu cầu mà một lớp dữ liệu phải đáp ứng.

Yêu cầu về lớp dữ liệu Kotlin

Dưới đây là các yêu cầu:

  • Hàm tạo chính phải có ít nhất một tham số.
  • Các tham số của hàm tạo chính phải được đánh dấu là val(chỉ đọc) hoặc var(đọc-ghi).
  • Lớp không thể là mở, trừu tượng, bên trong hoặc niêm phong.
  • Lớp có thể mở rộng các lớp khác hoặc triển khai các giao diện. Nếu bạn đang sử dụng phiên bản Kotlin trước 1.1, lớp chỉ có thể triển khai các giao diện.

Ví dụ: Lớp dữ liệu 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)") )

Khi bạn chạy chương trình, đầu ra sẽ là:

 name = jack age = 29

Khi bạn khai báo một lớp dữ liệu, trình biên dịch sẽ tự động tạo một số chức năng như toString(), equals(), hashcode()vv đằng sau hậu trường. Điều này giúp giữ cho bạn mã ngắn gọn. Nếu bạn đã sử dụng Java, bạn sẽ cần phải viết rất nhiều mã soạn sẵn.

Hãy sử dụng các chức năng sau:

Sao chép

Đối với một lớp dữ liệu, bạn có thể tạo một bản sao của một đối tượng với một số thuộc tính của nó khác bằng copy()hàm. Đây là cách nó hoạt động:

 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)") )

Khi bạn chạy chương trình, đầu ra sẽ là:

 u1: name = John, name = 29 u2: name = Randy, name = 29

phương thức toString ()

Hàm toString () trả về một biểu diễn chuỗi của đối tượng.

 data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Người dùng (tên = John, tuổi = 29)

hashCode () và bằng ()

Các hasCode()phương pháp lợi nhuận mã băm cho đối tượng. Nếu hai đối tượng bằng nhau, hashCode()tạo ra cùng một kết quả số nguyên. Đọc đề xuất: hashCode ()

Trả equals()về truenếu hai đối tượng bằng nhau (có cùng hashCode()). Nếu các đối tượng không bằng nhau, equals()trả về false. Đề xuất đọc: bằng ()

 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.") )

Khi bạn chạy chương trình, đầu ra sẽ là:

u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 bằng u2. u1 không bằng u3.

Tuyên bố hủy cấu trúc

Bạn có thể hủy cấu trúc một đối tượng thành một số biến bằng cách sử dụng khai báo hủy. Ví dụ:

 lớp dữ liệu Người dùng (tên val: Chuỗi, tuổi val: Int, giới tính val: Chuỗi) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )

Khi bạn chạy chương trình, đầu ra sẽ là:

 tên = tuổi John = 29 giới tính = Nam

Điều này có thể xảy ra vì trình biên dịch tạo ra các componentN()hàm tất cả các thuộc tính cho một lớp dữ liệu. Ví dụ:

 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" )

Khi bạn chạy chương trình, đầu ra sẽ là:

 John 29 Nam

thú vị bài viết...