Bird
Raised Fist0
Kotlinprogramming~20 mins

Data class copy and destructuring in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Data Class Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Kotlin code using data class copy?

Consider the following Kotlin data class and code snippet. What will be printed?

Kotlin
data class Person(val name: String, val age: Int)

fun main() {
    val original = Person("Alice", 30)
    val copy = original.copy(age = 35)
    println(copy)
}
APerson(name=Alice, age=35)
BPerson(name=Alice, age=30)
CPerson(name=Alice, age=0)
DPerson(name=, age=35)
Attempts:
2 left
💡 Hint

Remember that copy() creates a new object with the same properties unless you override them.

❓ Predict Output
intermediate
2:00remaining
What is the output when destructuring a Kotlin data class?

Given the Kotlin data class and code below, what will be printed?

Kotlin
data class Point(val x: Int, val y: Int)

fun main() {
    val point = Point(10, 20)
    val (a, b) = point
    println("a = $a, b = $b")
}
Aa = 20, b = 10
Ba = 0, b = 0
Ca = Point(x=10, y=20), b = null
Da = 10, b = 20
Attempts:
2 left
💡 Hint

Destructuring extracts properties in the order they are declared in the data class.

🔧 Debug
advanced
2:00remaining
What error does this Kotlin code raise when copying a data class?

Examine the Kotlin code below. What error will it produce when run?

Kotlin
data class User(val username: String, val email: String)

fun main() {
    val user = User("bob", "bob@example.com")
    val newUser = user.copy(username = null)
    println(newUser)
}
ASyntaxError: unexpected null
BType mismatch: null cannot be a value of a non-null type String
CNullPointerException at runtime
DNo error, prints User(username=null, email=bob@example.com)
Attempts:
2 left
💡 Hint

Check the type of the username property and what null means in Kotlin.

❓ Predict Output
advanced
2:00remaining
What is the output of destructuring with default values in Kotlin?

Consider this Kotlin data class and code. What will be printed?

Kotlin
data class Rectangle(val width: Int = 5, val height: Int = 10)

fun main() {
    val rect = Rectangle(height = 20)
    val (w, h) = rect
    println("Width: $w, Height: $h")
}
AWidth: 5, Height: 20
BWidth: 0, Height: 20
CWidth: 5, Height: 10
DWidth: 20, Height: 20
Attempts:
2 left
💡 Hint

Default values are used when arguments are not provided during object creation.

🧠 Conceptual
expert
2:00remaining
How many items are in the resulting map after copying and destructuring?

Given the Kotlin code below, how many entries does the resultMap contain?

Kotlin
data class Employee(val id: Int, val name: String, val department: String)

fun main() {
    val emp1 = Employee(1, "John", "Sales")
    val emp2 = emp1.copy(name = "Jane")
    val (id, name, dept) = emp2
    val resultMap = mapOf("id" to id, "name" to name, "department" to dept)
    println(resultMap.size)
}
A1
B2
C3
D0
Attempts:
2 left
💡 Hint

Count the number of key-value pairs added to the map.

Practice

(1/5)
1.

What does the copy() function do in a Kotlin data class?

easy
A. Changes the original object directly.
B. Deletes the original object and creates a new one.
C. Creates a new object with the same properties, optionally changing some.
D. Converts the object to a string representation.

Solution

  1. Step 1: Understand the purpose of copy()

    The copy() function in Kotlin data classes creates a new instance with the same property values.
  2. Step 2: Recognize optional property changes

    You can specify new values for some properties while copying, leaving others unchanged.
  3. Final Answer:

    Creates a new object with the same properties, optionally changing some. -> Option C
  4. Quick Check:

    copy() = new object with changes [OK]
Hint: Remember: copy() clones with optional changes [OK]
Common Mistakes:
  • Thinking copy() modifies the original object
  • Confusing copy() with toString()
  • Assuming copy() deletes the original
2.

Which of the following is the correct syntax to copy a Kotlin data class Person and change only the age property?

data class Person(val name: String, val age: Int)
easy
A. val newPerson = person.copy(age = 30)
B. val newPerson = person.copy(30)
C. val newPerson = copy(person, age = 30)
D. val newPerson = person.copy(name = "John")

Solution

  1. Step 1: Recall the copy() syntax

    The copy() function uses named arguments to change specific properties.
  2. Step 2: Identify correct usage

    Using person.copy(age = 30) changes only the age, keeping name same.
  3. Final Answer:

    val newPerson = person.copy(age = 30) -> Option A
  4. Quick Check:

    copy() uses named args for changes [OK]
Hint: Use named arguments inside copy() to change properties [OK]
Common Mistakes:
  • Passing values without property names
  • Using copy() as a standalone function
  • Changing wrong property by mistake
3.

What is the output of this Kotlin code?

data class Point(val x: Int, val y: Int)

fun main() {
    val p1 = Point(5, 10)
    val (a, b) = p1
    val p2 = p1.copy(y = 20)
    println("a = $a, b = $b")
    println(p2)
}
medium
A. a = 5, b = 20 Point(x=5, y=10)
B. a = 5, b = 10 Point(x=5, y=20)
C. a = 10, b = 5 Point(x=5, y=20)
D. a = 5, b = 10 Point(x=5, y=10)

Solution

  1. Step 1: Understand destructuring of p1

    Destructuring assigns a = p1.x = 5 and b = p1.y = 10.
  2. Step 2: Understand copy() usage

    p2 is a copy of p1 with y changed to 20, so Point(x=5, y=20).
  3. Final Answer:

    a = 5, b = 10 Point(x=5, y=20) -> Option B
  4. Quick Check:

    Destructuring + copy() = expected values [OK]
Hint: Destructure original, copy with changed property [OK]
Common Mistakes:
  • Mixing up destructured values
  • Assuming copy changes original
  • Printing wrong variable
4.

Find the error in this Kotlin code snippet:

data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 25)
    val (n, a) = user1.copy(age = 30)
    println("Name: $n, Age: $a")
}
medium
A. Variable names in destructuring must match property names.
B. Destructuring cannot be done on copy() result.
C. copy() requires all properties to be specified.
D. No error; code runs and prints updated age.

Solution

  1. Step 1: Check copy() usage

    The copy() function is correctly called with age = 30.
  2. Step 2: Check destructuring

    Destructuring works on the copy result, assigning n = "Alice" and a = 30.
  3. Final Answer:

    No error; code runs and prints updated age. -> Option D
  4. Quick Check:

    copy() + destructuring works fine [OK]
Hint: copy() returns data class instance usable for destructuring [OK]
Common Mistakes:
  • Thinking destructuring fails on copy() result
  • Believing copy() needs all properties
  • Confusing variable names with property names
5.

Given this data class and list, how do you create a new list of Person objects with age increased by 1, using copy() and destructuring?

data class Person(val name: String, val age: Int)

val people = listOf(Person("Tom", 20), Person("Sue", 25))
hard
A. people.map { it.copy(age = it.age + 1) }
B. people.forEach { it.copy(age = it.age + 1) }
C. people.copy { age += 1 }
D. people.map { (n, a) -> Person(n, a + 1) }

Solution

  1. Step 1: Understand list transformation

    We want to create a new list with each person's age increased by 1.
  2. Step 2: Use copy() inside map()

    Using map with it.copy(age = it.age + 1) creates new objects with updated age.
  3. Final Answer:

    people.map { it.copy(age = it.age + 1) } -> Option A
  4. Quick Check:

    map + copy() = new list with changed ages [OK]
Hint: Use map with copy() to update properties in list [OK]
Common Mistakes:
  • Using forEach which returns Unit, not a list
  • Trying to copy the whole list directly
  • Ignoring destructuring or copy() usage
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard