Properties and Encapsulation
Custom Setter
Validate a value before storing it in a property.
setter
A custom setter can control what gets stored.
Custom Setter
CustomSetter.kt
Replay: real traced execution (multi-file project)
class Rating {
var value: Int = 0
set(input) {
field = if (input < 0) 0 else if (input > 5) 5 else input
}
}
fun main() {
val input = 7
val rating = Rating()
rating.value = input
val stored = rating.value
println("input=$input")
println("stored=$stored")
}
class Rating {
var value: Int = 0
set(input) {
field = if (input < 0) 0 else if (input > 5) 5 else input
}
}
fun main() {
val input = -1
val rating = Rating()
rating.value = input
val stored = rating.value
println("input=$input")
println("stored=$stored")
}
class Rating {
var value: Int = 0
set(input) {
field = if (input < 0) 0 else if (input > 5) 5 else input
}
}
fun main() {
val input = 3
val rating = Rating()
rating.value = input
val stored = rating.value
println("input=$input")
println("stored=$stored")
}
input ← 7
8fun main() {9 val input→ 7 = 7 //@input=-1, 310 val rating = Rating()11 rating.value = input712 val stored = rating.valueif (input > 5)
3set(input) {4 field = if (input < 0) 0 else if (input7 > 5) 5 else input5}rating.value ← 5, stored ← 5
10 val rating = Rating()11 rating.value→ 5 = input712 val stored→ 5 = rating.value51314 println("input=$input7")15 println("stored=$stored5")16}outputinput=7 stored=5
input ← -1
8fun main() {9 val input→ -1 = -110 val rating = Rating()11 rating.value = input-112 val stored = rating.valueif (input < 0)
3set(input) {4 field = if (input-1 < 0) 0 else if (input > 5) 5 else input5}rating.value ← 0, stored ← 0
10 val rating = Rating()11 rating.value→ 0 = input-112 val stored→ 0 = rating.value01314 println("input=$input-1")15 println("stored=$stored0")16}outputinput=-1 stored=0
input ← 3
8fun main() {9 val input→ 3 = 310 val rating = Rating()11 rating.value = input312 val stored = rating.valueelse
3set(input) {4 field = if (input < 0) 0 else if (input > 5) 5 else input35}rating.value ← 3, stored ← 3
10 val rating = Rating()11 rating.value→ 3 = input312 val stored→ 3 = rating.value31314 println("input=$input3")15 println("stored=$stored3")16}outputinput=3 stored=3