Zerstörungserklärungen in Kotlin

Zerstörungserklärungen in Kotlin

1. Überblick

In diesem Tutorial werden wir das Konzept der Destrukturierungserklärungen in Kotlin vorstellen und einen Blick darauf werfen, wie es verwendet werden kann.

Wenn Sie mehr über Kotlin erfahren möchten, lesen Siethis article.

2. Zerstörungserklärungen

Dieses Konzept besteht darin, Objekte als eine Reihe separater Variablen zu behandeln.

2.1. Objekte

Das Aufteilen eines Objekts in mehrere Variablen kann praktisch sein:

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

Damit haben wir drei neue Variablen erstellt:

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

Eine Destrukturierungsdeklaration wird wie folgt kompiliert:

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

Um die Destrukturierungsdeklaration verwenden zu können, müssen Sie sicherstellen, dass entweder die Komponente mit den Schlüsselwörternoperator oder die Klasse mit den Schlüsselwörterndata gekennzeichnet ist.

Wenn Sie mehr überData Classesin Kotlin erfahren möchten, vergessen Sie nicht, den Artikel vonthiszu lesen.

2.2. Rückgabetypen

Deklarationen zur Destrukturierung können auch bei der Arbeit mit Rückgabewerten verwendet werden:

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

Oder nehmen wir an, wir müssen zwei Werte von einer Funktion zurückgeben:

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

val (result, status) = twoValuesReturn()

2.3. Sammlungen und For-Loops

Das Iterieren einer Auflistung mit for-Schleifen kann mit folgenden Deklarationen erfolgen:

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

Den Variablena undb werden Werte zugewiesen, die von den Methodencomponent1() undcomponent2() zurückgegeben werden. Diese geben die ersten beiden Elemente in einer Sammlung zurück.

InMap wären die Variablen jedochkey bzw.value,:

var map: HashMap = HashMap()

map.put(1, person)

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

2.4. Unterstreichen und Zerstören in Lambdas

Falls wir nicht alle Werte benötigen, die in einer Destrukturierungsdeklaration erhalten wurden, können wir anstelle des Variablennamens einen Unterstrich verwenden:

val (_, name, age) = person

Oder, wenn nicht benötigte Felder am Ende stehen, können wir sie überhaupt weglassen:

val (id, name) = person

Wir können auch die Syntax der Destrukturierungsdeklarationen für Lambda-Parameter verwenden, sofern es sich um einen Typ mit den entsprechendencomponentN-Funktionen handelt:

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

Beachten Sie den Unterschied zwischen der Deklaration von zwei Parametern und der Deklaration eines destrukturierenden Paares:

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

3. Fazit

In diesem kurzen Artikel haben wir uns mit Destrukturierungserklärungen in Kotlin mit ihren vielen Verwendungszwecken und Besonderheiten befasst.

Um mehr über Kotlin zu erfahren, lesen Sie auf jeden Fall unsere anderen Artikel wieOverview of Kotlin Collections API und die bereits erwähntenData Classes in Kotlin.

Und wie immer finden Sie die vollständige Implementierung dieser Beispiele in unserenGitHub project.