Zerstörungserklärungen in Kotlin

1. Übersicht

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

Wenn Sie mehr über Kotlin erfahren möchten, lesen Sie diesen Artikel.

2. Zerstörungserklärungen

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

2.1. Objekte

Das Zerstören 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 dem Operator oder die Klasse mit den Datenschlüsselwörtern gekennzeichnet ist .

Weitere Informationen zu Datenklassen in Kotlin finden Sie in diesem Artikel.

2.2. Rückgabetypen

Destrukturierungsdeklarationen können auch verwendet werden, wenn mit Rückgabewerten gearbeitet wird:

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 Sammlung mit for-Schleifen kann mit Destrukturierungsdeklarationen wie folgt erfolgen:

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

Den Variablen a und b werden Werte zugewiesen, die von den Methoden component1 () und component2 () zurückgegeben werden. Diese geben die ersten beiden Elemente in einer Auflistung zurück.

In einer Map wären die Variablen jedoch Schlüssel bzw. Wert :

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 in einer Destrukturierungsdeklaration erhaltenen Werte benötigen, können wir anstelle des Variablennamens einen Unterstrich verwenden:

val (_, name, age) = person

Oder wenn nicht benötigte Felder am Ende sind, 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 entsprechenden Komponenten-N- 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 Destrukturierungspaars:

{ 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 Destructuring Declarations in Kotlin mit seinen vielen Verwendungen und Besonderheiten befasst.

Um mehr über Kotlin zu erfahren, lesen Sie auf jeden Fall unsere anderen Artikel wie Übersicht über die Kotlin Collections API und die bereits erwähnten Datenklassen in Kotlin .

Und wie immer finden Sie die vollständige Implementierung dieser Beispiele in unserem GitHub-Projekt.