Какой смысл деструктурировать объявления в Котлине?

получил вопрос для сообщества. Теперь я изучаю Kotlin и только что наткнулся на концепцию, называемую декларацией деструкции, – когда вы можете сразу возвращать сразу несколько значений из функции. Это кажется очень удобным, но в то же время это выглядит как сложное обходное решение. Каждый раз, когда я думаю об этой функции в Java, я понимаю, что это дыра в моей архитектуре – вероятно, должен быть класс, а не только пара переменных! Ребята, что вы думаете?

Концепция позволяет иметь классы, которые четко идентифицируют некоторые из их основных свойств, компонентов .

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

Для сравнения:

val point = clickEvent.getPointOnScreen() val x = point.xCoordinate val y = point.yCoordinate // Use `x` and `y` in some calculations 

и, предположив, что тип имеет component1 и component2 , справедливо:

  val (x, y) = clickEvent.getPointOnScreen() 

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

Другой пример – работа с элементами карты, например:

 for ((key, value) in myMap) { /* ... */ } 

Map.Entry<K, V> (key, value) по-прежнему Map.Entry<K, V> , и вы можете заменить его for (entry in myMap) ... , но обычно это два свойства, которые вам нужны. Здесь деструктуризация избавляет вас от небольшого синтаксического шума.