O que é Destructuring em Kotlin?
Destructuring (desestruturação) permite decompor um objeto em várias variáveis numa única declaração. Em vez de acessar cada propriedade separadamente, você extrai tudo de uma vez. É prático, limpo e muito usado no dia a dia.
Sintaxe básica com Data Class
data class Endereco(val rua: String, val cidade: String, val estado: String)
fun main() {
val endereco = Endereco("Rua das Flores", "Recife", "PE")
val (rua, cidade, estado) = endereco
println("$rua, $cidade - $estado")
// Rua das Flores, Recife - PE
}
Funciona porque data classes geram automaticamente as funções component1(), component2(), etc.
Destructuring em Maps
Uma das situações mais comuns é iterar sobre mapas:
fun main() {
val capitais = mapOf(
"SP" to "São Paulo",
"RJ" to "Rio de Janeiro",
"BA" to "Salvador"
)
for ((sigla, capital) in capitais) {
println("$sigla -> $capital")
}
}
Bem mais legível do que acessar entry.key e entry.value, concorda?
Destructuring em lambdas
fun main() {
val pessoas = listOf(
Pair("Ana", 25),
Pair("Bruno", 30),
Pair("Carla", 28)
)
pessoas.forEach { (nome, idade) ->
println("$nome tem $idade anos")
}
}
Ignorando variáveis com _
Se não precisa de algum componente, use _ pra ignorar:
data class Transacao(val id: String, val valor: Double, val data: String)
fun main() {
val transacao = Transacao("TX-001", 150.0, "2026-02-15")
val (_, valor, _) = transacao
println("Valor: R$ $valor") // Valor: R$ 150.0
}
Criando destructuring em classes próprias
Para classes que não são data class, basta implementar as funções operator componentN():
class Coordenada(val latitude: Double, val longitude: Double) {
operator fun component1() = latitude
operator fun component2() = longitude
}
fun main() {
val (lat, lng) = Coordenada(-8.0476, -34.8770)
println("Lat: $lat, Lng: $lng")
}
Retornando múltiplos valores
Destructuring combina bem com Pair e Triple pra retornar vários valores de uma função:
fun dividir(a: Int, b: Int): Pair<Int, Int> {
return Pair(a / b, a % b)
}
fun main() {
val (quociente, resto) = dividir(17, 5)
println("Quociente: $quociente, Resto: $resto")
}
Destructuring é um recurso simples que faz uma diferença enorme na legibilidade do código Kotlin.