There are times when you need to extract an object into a number of variables.
Let’s take the example below:
val (id, name, position, department) = employee
In Kotlin, this is known as a destructuring declaration
. These new variables can now be used independently.
The compilation thereof would look something like this, but is not required:
val id = employee.component1()
val name = employee.component2()
val position = employee.component3()
val department = employee.component4()
Returning multiple values from a Function
Much like deconstruction of variables and collections, functions too can return multiple values.
// define a return object with multiple values
data class MultiValues(val someId: Int, val name: String)
// create our function to return multiple values
fun getDefaults(): MultiValues {
val id = 123
val name = "Andrew"
return MultiValues(id, name)
}
// now get the values back
val (id, name) = getDefaults()
Destructuring on Maps
The same can be done for a map
.
for ((key, value) in map) {
// ...
}
When to use an _ (underscore) in Destructuring
Underscores (_
) are used when you want to ignore the returned value in a specific position.
Let’s take the following example:
val (_, name) = getDefaults()
We will only have access to the name
variable response now, and not the id
.