Use copy to make a modified data-class value.

copy Data classes include a `copy` function for creating a value with selected changes.

Copy Function

level
CopyFunction.kt
Replay: real traced execution (multi-file project)
data class Badge(val name: String, val level: Int)

fun main() {
    val level = 1
    val badge = Badge("guide", level)
    val promoted = badge.copy(level = level + 1)
    val summary = "${promoted.name}:${promoted.level}"

    println("level=$level")
    println("summary=$summary")
}
data class Badge(val name: String, val level: Int)

fun main() {
    val level = 2
    val badge = Badge("guide", level)
    val promoted = badge.copy(level = level + 1)
    val summary = "${promoted.name}:${promoted.level}"

    println("level=$level")
    println("summary=$summary")
}
data class Badge(val name: String, val level: Int)

fun main() {
    val level = 4
    val badge = Badge("guide", level)
    val promoted = badge.copy(level = level + 1)
    val summary = "${promoted.name}:${promoted.level}"

    println("level=$level")
    println("summary=$summary")
}
  1. level ← 1, summary ← guide:2

    3fun main() {4    val level→ 1 = 1 //@level=2, 45    val badge = Badge("guide", level1)6    val promoted = badge.copy(level = level1 + 1)7    val summary→ guide:2 = "${promoted.nameguide}:${promoted.level2}"89    println("level=$level1")10    println("summary=$summaryguide:2")11}
    outputlevel=1
    summary=guide:2
  1. level ← 2, summary ← guide:3

    3fun main() {4    val level→ 2 = 25    val badge = Badge("guide", level2)6    val promoted = badge.copy(level = level2 + 1)7    val summary→ guide:3 = "${promoted.nameguide}:${promoted.level3}"89    println("level=$level2")10    println("summary=$summaryguide:3")11}
    outputlevel=2
    summary=guide:3
  1. level ← 4, summary ← guide:5

    3fun main() {4    val level→ 4 = 45    val badge = Badge("guide", level4)6    val promoted = badge.copy(level = level4 + 1)7    val summary→ guide:5 = "${promoted.nameguide}:${promoted.level5}"89    println("level=$level4")10    println("summary=$summaryguide:5")11}
    outputlevel=4
    summary=guide:5