Trong bài viết này, bạn sẽ học cách sử dụng hàm getters và hàm setters trong ngôn ngữ lập trình Kotlin với sự trợ giúp của ví dụ.
Trước khi bạn tìm hiểu về 2 hàm getters và setter, hãy đọc bài về class và đối tượng trong Kotlin.
Trong lập trình, hàm getters được sử dụng để nhận giá trị của thuộc tính. Tương tự, hàm setters được sử dụng để thiết lập giá trị của thuộc tính.
Trong Kotlin, getters và setters là tùy chọn (không bắt buộc) và được tạo tự động kể cả khi bạn không tạo ra chúng trong chương trình của mình.
1. Hàm getters và setters làm việc như thế nào?
Đoạn code sau trong Kotlin
class Person {
var name: String = "defaultValue"
}
sẽ tương đương với
class Person {
var name: String = "defaultValue"
// getter
get() = field
// setter
set(value) {
field = value
}
}
Khi bạn khởi tạo đối tượng của class Person và khởi tạo thuộc tính name, nó được truyền cho tham số value của hàm setters và gán filé bằng value.
val p = Person()
p.name = "jack"
Bây giờ, khi bạn truy cập thuộc tính name của đối tượng, bạn sẽ nhận được giá trị field nhờ đoạn code get() = field.
println("${p.name}")
Dưới đây là một ví dụ:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
fun main(args: Array<String>) {
val p = Person()
p.name = "jack"
println("${p.name}")
}
class Person {
var name: String = "defaultValue"
get() = field
set(value) {
field = value
}
}
Khi bạn chạy chương trình, kết quả sẽ là:
jack
Đây là cách mà hàm getters và setters hoạt động theo mặc định. Tuy nhiên, bạn có thể thay đổi giá trị của thuộc tính (sửa đổi giá trị) bằng cách sử dụng hàm getters và setters.
Ví dụ: Thay đổi giá trị của thuộc tính
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
fun main(args: Array<String>) {
val maria = Girl()
maria.actualAge = 15
maria.age = 15
println("Maria: actual age = ${maria.actualAge}")
println("Maria: pretended age = ${maria.age}")
val angela = Girl()
angela.actualAge = 35
angela.age = 35
println("Angela: actual age = ${angela.actualAge}")
println("Angela: pretended age = ${angela.age}")
}
class Girl {
var age: Int = 0
get() = field
set(value) {
field = if (value < 18)
18
else if (value >= 18 && value <= 30)
value
else
value-3
}
var actualAge: Int = 0
}
Khi bạn chạy chương trình, kết quả sẽ là:
Maria: actual age = 15
Maria: pretended age = 18
Angela: actual age = 35
Angela: pretended age = 32
Ở đây, thuộc tính actualAge đã hoạt động theo ý muốn.
Tuy nhiên, có logic bổ sung là hàm setters để có thể sửa đổi giá trị của thuộc tính age.