Use field inside a setter to store a normalized value.

field Inside a custom accessor, `field` refers to the property's backing storage.

Backing Field

raw
BackingField.kt
Replay: real traced execution (multi-file project)
class Label {
    var text: String = "ready"
        set(value) {
            field = value.trim()
        }
}

fun main() {
    val raw = " done "
    val label = Label()
    label.text = raw
    val clean = label.text

    println("clean=$clean")
    println("length=${clean.length}")
}
class Label {
    var text: String = "ready"
        set(value) {
            field = value.trim()
        }
}

fun main() {
    val raw = " next "
    val label = Label()
    label.text = raw
    val clean = label.text

    println("clean=$clean")
    println("length=${clean.length}")
}
class Label {
    var text: String = "ready"
        set(value) {
            field = value.trim()
        }
}

fun main() {
    val raw = " ok "
    val label = Label()
    label.text = raw
    val clean = label.text

    println("clean=$clean")
    println("length=${clean.length}")
}
  1. raw ← done , label.text ← done, clean ← done

    8fun main() {9    val raw→  done  = " done " //@raw=" next ", " ok "10    val label = Label()11    label.text→ done = raw done 12    val clean→ done = label.textdone1314    println("clean=$cleandone")15    println("length=${clean.length4}")16}
    outputclean=done
    length=4
  1. raw ← next , label.text ← next, clean ← next

    8fun main() {9    val raw→  next  = " next "10    val label = Label()11    label.text→ next = raw next 12    val clean→ next = label.textnext1314    println("clean=$cleannext")15    println("length=${clean.length4}")16}
    outputclean=next
    length=4
  1. raw ← ok , label.text ← ok, clean ← ok

    8fun main() {9    val raw→  ok  = " ok "10    val label = Label()11    label.text→ ok = raw ok 12    val clean→ ok = label.textok1314    println("clean=$cleanok")15    println("length=${clean.length2}")16}
    outputclean=ok
    length=2