Déclarations de destruction à Kotlin

Déclarations de destruction à Kotlin

1. Vue d'ensemble

Dans ce didacticiel, nous présenterons le concept de déclarations de destruction dans Kotlin et verrons comment il peut être utilisé.

Si vous voulez en savoir plus sur Kotlin, consultezthis article.

2. Déclarations de destruction

Ce concept consiste à traiter les objets comme un ensemble de variables séparées.

2.1. Objets

Destruction d'un objet en plusieurs variables peut être pratique:

val person = Person(1, "Jon Snow", 20)
val(id, name, age) = person

Avec cela, nous avons créé trois nouvelles variables:

println(id)     //1
println(name)   //Jon Snow
println(age)    //20

Une déclaration de déstructuration est compilée sous le code suivant:

val id = person.component1();
val name = person.component2();
val age = person.component3();

Afin d'utiliser la déclaration de déstructuration, nous devons nous assurer que le composant est marqué avec lesoperator ou la classe est marquée avec les mots-clésdata.

Pour en savoir plus surData Classes à Kotlin, n'oubliez pas de consulter l'article dethis.

2.2. Types de retour

Les déclarations de destruction peuvent également être utilisées lorsque vous utilisez des valeurs de retour:

fun getPersonInfo() = Person(2, "Ned Stark", 45)
val(id, name, age) = getPersonInfo()

Ou disons que nous devons renvoyer deux valeurs à partir d'une fonction:

fun twoValuesReturn(): Pair {
    // ...
    return Pair(1, "success")
}

val (result, status) = twoValuesReturn()

2.3. Collections et boucles For

Itérer une collection avec des boucles for peut être fait avec des déclarations de déstructuration, comme ceci:

for ((a, b) in collection) { ... }

Les variablesa etb se voient attribuer des valeurs renvoyées par les méthodescomponent1() etcomponent2() - qui renvoient les deux premiers éléments d'une collection.

Cependant, dans unMap, les variables seraient respectivementkey etvalue,:

var map: HashMap = HashMap()

map.put(1, person)

for((key, value) in map){
    println("Key: $key, Value: $value")
}

2.4. Soulignement et destruction dans les Lambdas

Dans le cas où nous n’avons pas besoin de toutes les valeurs obtenues dans une déclaration de déstructuration, nous pouvons utiliser un trait de soulignement au lieu du nom de la variable:

val (_, name, age) = person

Ou, si les champs non nécessaires sont à la fin, nous pouvons les omettre du tout:

val (id, name) = person

Nous pouvons également utiliser la syntaxe des déclarations de déstructuration pour les paramètres lambda, du moment qu'il s'agit d'un type avec les fonctionscomponentN appropriées:

map.mapValues { entry -> "${entry.value}!" }
map.mapValues { (key, value) -> "$value!" }

Soyez conscient de la différence entre déclarer deux paramètres et déclarer un couple de déstructuration:

{ a -> ... } // one parameter
{ a, b -> ... } // two parameters
{ (a, b) -> ... } // a destructured pair
{ (a, b), c -> ... } // a destructured pair and another parameter

3. Conclusion

Dans cet article rapide, nous avons abordé les déclarations de destruction dans Kotlin, avec ses nombreux usages et particularités.

Pour en savoir plus sur Kotlin, certainement, consultez nos autres articles tels queOverview of Kotlin Collections API et lesData Classes in Kotlin déjà mentionnés.

Et, comme toujours, l'implémentation complète de ces exemples peut être trouvée dans nosGitHub project.