Bird
Raised Fist0
Kotlinprogramming~15 mins

Data class copy and destructuring in Kotlin - Mini Project: Build & Apply

Choose your learning style10 modes available
Data class copy and destructuring
📖 Scenario: You are managing a small library system. Each book has a title, author, and year of publication.
🎯 Goal: You will create a data class for books, make a copy of a book with a changed year, and use destructuring to get the book details.
📋 What You'll Learn
Create a data class called Book with title, author, and year properties
Create an instance of Book called originalBook with exact values
Create a copy of originalBook called updatedBook with the year changed
Use destructuring to get title, author, and year from updatedBook
Print the destructured values in the format: Title: [title], Author: [author], Year: [year]
💡 Why This Matters
🌍 Real World
Data classes and copying are useful when you want to keep original data safe but create modified versions, like updating book info without changing the original record.
💼 Career
Understanding data classes, copying, and destructuring is important for Kotlin developers working on apps that manage data efficiently and clearly.
Progress0 / 4 steps
1
Create the Book data class and originalBook instance
Create a data class called Book with title (String), author (String), and year (Int) properties. Then create a variable called originalBook and set it to Book("The Hobbit", "J.R.R. Tolkien", 1937).
Kotlin
Hint

Use data class keyword to create the class. Then create originalBook with the exact values.

2
Create a copy of originalBook with a new year
Create a variable called updatedBook by copying originalBook and changing the year to 1951 using the copy function.
Kotlin
Hint

Use originalBook.copy(year = 1951) to create the new book.

3
Destructure updatedBook into variables
Use destructuring to create variables title, author, and year from updatedBook.
Kotlin
Hint

Use val (title, author, year) = updatedBook to get the values.

4
Print the destructured book details
Print the book details using println in this exact format: Title: [title], Author: [author], Year: [year].
Kotlin
Hint

Use println with an f-string style using $ to insert variables.

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