Уничтожение объявлений в Котлине

Уничтожение деклараций в Котлине

1. обзор

В этом руководстве мы познакомимся с концепцией деструктурирования объявлений в Kotlin и посмотрим, как ее можно использовать.

Если вы хотите узнать больше о Kotlin, посетитеthis article.

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();

Чтобы использовать объявление деструктуризации, мы должны убедиться, что либо компонент помеченoperator, либо класс помечен ключевыми словамиdata.

Чтобы узнать больше оData Classes в Kotlin, не забудьте проверить статьюthis.

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-loop можно сделать с помощью объявлений деструктурирования, например:

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

Переменнымa иb присваиваются значения, возвращаемые методамиcomponent1() иcomponent2(), которые возвращают первые два элемента в коллекции.

Однако в aMap переменными будутkey иvalue, соответственно:

var map: HashMap = HashMap()

map.put(1, person)

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

2.4. Подчеркивание и деструктуризация в лямбдах

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

val (_, name, age) = person

Или, если ненужные поля находятся в конце, мы можем вообще их опустить:

val (id, name) = person

Мы также можем использовать синтаксис деструктурирующих объявлений для лямбда-параметров, если это тип с соответствующими функциямиcomponentN:

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, обязательно ознакомьтесь с другими нашими статьями, такими какOverview of Kotlin Collections API и уже упомянутыйData Classes in Kotlin.

И, как всегда, полную реализацию этих примеров можно найти в нашемGitHub project.