Validate a value before storing it in a property.

setter A custom setter can control what gets stored.

Custom Setter

input
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")
}
  1. input ← 7

    8fun main() {9    val input→ 7 = 7 //@input=-1, 310    val rating = Rating()11    rating.value = input712    val stored = rating.value
  2. if (input > 5)

    3set(input) {4    field = if (input < 0) 0 else if (input7 > 5) 5 else input5}
  3. 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
  1. input ← -1

    8fun main() {9    val input→ -1 = -110    val rating = Rating()11    rating.value = input-112    val stored = rating.value
  2. if (input < 0)

    3set(input) {4    field = if (input-1 < 0) 0 else if (input > 5) 5 else input5}
  3. 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
  1. input ← 3

    8fun main() {9    val input→ 3 = 310    val rating = Rating()11    rating.value = input312    val stored = rating.value
  2. else

    3set(input) {4    field = if (input < 0) 0 else if (input > 5) 5 else input35}
  3. 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