получил вопрос для сообщества. Теперь я изучаю 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) ...
, но обычно это два свойства, которые вам нужны. Здесь деструктуризация избавляет вас от небольшого синтаксического шума.