Use apply to configure an object and then read scalar fields.

apply `apply` uses the object as the block receiver and returns the same object.

Apply Config

title
ApplyConfig.kt
Replay: real traced execution (multi-file project)
class Badge {
    var title: String = ""
    var level: Int = 0
}

fun main() {
    val title = "starter"
    val badge = Badge().apply {
        this.title = title
        level = title.length
    }
    val summary = "${badge.title}:${badge.level}"

    println("title=$title")
    println("summary=$summary")
}
class Badge {
    var title: String = ""
    var level: Int = 0
}

fun main() {
    val title = "expert"
    val badge = Badge().apply {
        this.title = title
        level = title.length
    }
    val summary = "${badge.title}:${badge.level}"

    println("title=$title")
    println("summary=$summary")
}
class Badge {
    var title: String = ""
    var level: Int = 0
}

fun main() {
    val title = "guide"
    val badge = Badge().apply {
        this.title = title
        level = title.length
    }
    val summary = "${badge.title}:${badge.level}"

    println("title=$title")
    println("summary=$summary")
}
  1. title ← starter, summary ← starter:7

    6fun main() {7    val title→ starter = "starter" //@title="expert", "guide"8    val badge = Badge().apply {9        this.title = title10        level = title.length11    }12    val summary→ starter:7 = "${badge.titlestarter}:${badge.level7}"1314    println("title=$titlestarter")15    println("summary=$summarystarter:7")16}
    outputtitle=starter
    summary=starter:7
  1. title ← expert, summary ← expert:6

    6fun main() {7    val title→ expert = "expert"8    val badge = Badge().apply {9        this.title = title10        level = title.length11    }12    val summary→ expert:6 = "${badge.titleexpert}:${badge.level6}"1314    println("title=$titleexpert")15    println("summary=$summaryexpert:6")16}
    outputtitle=expert
    summary=expert:6
  1. title ← guide, summary ← guide:5

    6fun main() {7    val title→ guide = "guide"8    val badge = Badge().apply {9        this.title = title10        level = title.length11    }12    val summary→ guide:5 = "${badge.titleguide}:${badge.level5}"1314    println("title=$titleguide")15    println("summary=$summaryguide:5")16}
    outputtitle=guide
    summary=guide:5