Declarações de desestruturação em Kotlin
1. Visão geral
Neste tutorial, vamos apresentar o conceito de declarações de destruição em Kotlin e dar uma olhada em como ele pode ser usado.
Se você quiser saber mais sobre Kotlin, verifiquethis article.
2. Declarações de Destruturação
Este conceito consiste em tratar objetos como um conjunto de variáveis separadas.
2.1. Objetos
A reestruturação de um objeto em várias variáveis pode ser conveniente:
val person = Person(1, "Jon Snow", 20)
val(id, name, age) = person
Com isso, criamos três novas variáveis:
println(id) //1
println(name) //Jon Snow
println(age) //20
Uma declaração de desestruturação é compilada como o seguinte código:
val id = person.component1();
val name = person.component2();
val age = person.component3();
Para usar a declaração de desestruturação, precisamos ter certeza de que o componente está marcado comoperator ou a classe está marcada com as palavras-chavedata.
Para mais informações sobreData Classes em Kotlin, não se esqueça de verificar o artigothis.
2.2. Tipos de retorno
As declarações de reestruturação também podem ser usadas ao trabalhar com valores de retorno:
fun getPersonInfo() = Person(2, "Ned Stark", 45)
val(id, name, age) = getPersonInfo()
Ou digamos que precisamos retornar dois valores de uma função:
fun twoValuesReturn(): Pair {
// ...
return Pair(1, "success")
}
val (result, status) = twoValuesReturn()
2.3. Coleções e loops for
A iteração de uma coleção com for-loops pode ser feita com declarações de desestruturação, assim:
for ((a, b) in collection) { ... }
As variáveisaeb são atribuídos a valores retornados pelos métodoscomponent1()ecomponent2() - que retornam os primeiros dois elementos em uma coleção.
No entanto, em aMap, as variáveis seriamkeyevalue, respectivamente:
var map: HashMap = HashMap()
map.put(1, person)
for((key, value) in map){
println("Key: $key, Value: $value")
}
2.4. Sublinhado e Destructuring em Lambdas
Caso não precisemos de todos os valores obtidos em uma declaração de desestruturação, podemos usar sublinhado em vez do nome da variável:
val (_, name, age) = person
Ou, se os campos não necessários estiverem no final, podemos omiti-los:
val (id, name) = person
Também podemos usar a sintaxe de declarações de desestruturação para parâmetros lambda, desde que seja um tipo com as funçõescomponentN apropriadas:
map.mapValues { entry -> "${entry.value}!" }
map.mapValues { (key, value) -> "$value!" }
Esteja ciente da diferença entre declarar dois parâmetros e declarar um par de desestruturação:
{ a -> ... } // one parameter
{ a, b -> ... } // two parameters
{ (a, b) -> ... } // a destructured pair
{ (a, b), c -> ... } // a destructured pair and another parameter
3. Conclusão
Neste artigo rápido, abordamos as declarações de destruição em Kotlin, com seus muitos usos e particularidades.
Para aprender mais sobre Kotlin, definitivamente, confira nossos outros artigos comoOverview of Kotlin Collections APIe os já mencionadosData Classes in Kotlin.
E, como sempre, a implementação completa desses exemplos pode ser encontrada em nossoGitHub project.