Уничтожение деклараций в Котлине
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.