Декларации за деструктуриране в Котлин

1. Общ преглед

В този урок ще представим концепцията за декларации за деструктуриране в Kotlin и ще разгледаме как тя може да се използва.

Ако искате да научите повече за Kotlin, вижте тази статия.

2. Декларации за деструктуриране

Тази концепция се състои от третиране на обекти като набор от отделни променливи.

2.1. Обекти

Деструктурирането на обект на множество променливи може да бъде удобно:

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

С това създадохме три нови променливи:

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

Декларацията за деструктуриране се съставя като следния код:

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

За да използваме декларация за деструктуриране, трябва да се уверим, че или компонентът е маркиран с оператора, или класът е маркиран с ключови думи за данни .

За повече информация относно класовете данни в Kotlin, не забравяйте да проверите тази статия.

2.2. Видове връщане

Декларациите за деструктуриране могат да се използват и при работа с върнати стойности:

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

Или да кажем, че трябва да върнем две стойности от функция:

fun twoValuesReturn(): Pair { // ... return Pair(1, "success") } val (result, status) = twoValuesReturn()

2.3. Колекции и For-цикли

Итерацията на колекция с for-цикли може да се направи с деструктуриращи декларации, като тази:

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

На променливите a и b се присвояват стойности, върнати от методите component1 () и component2 () - които връщат първите два елемента в колекция.

Въпреки това, в Map променливите ще бъдат съответно ключ и стойност :

var map: HashMap = HashMap() map.put(1, person) for((key, value) in map){ println("Key: $key, Value: $value") }

2.4. Подчертаване и деструктуриране в Lambdas

В случай, че не се нуждаем от всички стойности, получени в декларация за деструктуриране, можем да използваме долна черта вместо името на променливата:

val (_, name, age) = person

Или, ако не са необходими полета са в края, можем изобщо да ги пропуснем:

val (id, name) = person

Можем да използваме и синтаксиса на деструктуриращите декларации за ламбда параметри, стига да е тип със съответните функции на компонентN :

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

Имайте предвид разликата между декларирането на два параметъра и декларирането на двойка за деструктуриране:

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

3. Заключение

В тази кратка статия се обърнахме към Декларациите за деструктуриране в Котлин с многобройните му употреби и особености.

За да научите повече за Kotlin, определено разгледайте другите ни статии като Общ преглед на API за колекции на Kotlin и вече споменатите класове данни в Kotlin .

И както винаги, пълното изпълнение на тези примери може да бъде намерено в нашия проект GitHub.