В Kotlin 2.3.20 появилась экспериментальная фича name-based destructuring.
Раньше деструктуризация работала через
componentN() и зависела от порядка полей:
data class User(
val firstName: String,
val lastName: String
)
val user = User("Alice", "Husseini")
val (lastName, firstName) = user
И всё: переменные названы красиво, но значения уже перепутаны.
Теперь Kotlin предлагает другой подход - связывать переменные с property по имени, а не по позиции:
(val firstName = firstName, val lastName = lastName) = user
Это делает код безопаснее, особенно когда:
— в data class много полей
— порядок полей меняется
— деструктуризация используется в лямбдах, маппингах и UI-моделях
— имя переменной важнее позиции
Фича пока экспериментальная и включается через compiler option:
freeCompilerArgs.add("-Xname-based-destructuring=only-syntax")
Есть несколько режимов:
only-syntax - включает явный синтаксис без изменения старого поведенияname-mismatch - предупреждает, если имена не совпадают с полямиcomplete - делает деструктуризацию в круглых скобках name-based, а позиционную переносит в квадратные скобки:
val [firstName, lastName] = user
Похоже, Kotlin постепенно уходит от магии
component1, component2 к более читаемой и безопасной деструктуризации.Для Android-разработки это особенно приятно: меньше шансов тихо перепутать
title, subtitle, id, state или другие поля в UI-моделях.https://proandroiddev.com/beyond-positions-kotlins-new-name-based-destructuring-eee347d1bb5c
Экспериментальная фича, но направление очень здравое.
✍️ @kotlin_lib
