Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Kotlin中,对声明进行解构的意义何在?_Kotlin - Fatal编程技术网

什么';在Kotlin中,对声明进行解构的意义何在?

什么';在Kotlin中,对声明进行解构的意义何在?,kotlin,Kotlin,我遇到了一个称为destructuring declarations的概念——当您可以一次从一个函数返回多个值时。这看起来很方便,但同时看起来是一个棘手的解决办法。每当我想到Java中的这个特性时,我都明白这是我的体系结构中的一个漏洞——应该有一个类,而不仅仅是几个变量 你觉得怎么样?这个概念允许类清楚地识别它们的一些主要属性,组件 然后,您可以通过使用解构声明来访问这些组件,而无需访问属性的语法噪音 比较: val point = clickEvent.getPointOnScreen()

我遇到了一个称为destructuring declarations的概念——当您可以一次从一个函数返回多个值时。这看起来很方便,但同时看起来是一个棘手的解决办法。每当我想到Java中的这个特性时,我都明白这是我的体系结构中的一个漏洞——应该有一个类,而不仅仅是几个变量


你觉得怎么样?

这个概念允许类清楚地识别它们的一些主要属性,组件

然后,您可以通过使用解构声明来访问这些组件,而无需访问属性的语法噪音

比较:

 val point = clickEvent.getPointOnScreen()
 val x = point.xCoordinate
 val y = point.yCoordinate
 // Use `x` and `y` in some calculations
并且,假设该类型具有
组件1
组件2
,只需:

 val (x, y) = clickEvent.getPointOnScreen()
基本上,不需要使用这种语法糖,概念本身也不会损害任何抽象,它只提供了一种方便的方式,在某些情况下,当您不需要实例本身时,可以访问类实例的属性

另一个示例是使用地图条目,例如:

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

(键、值)
解构之后仍然有一个
Map.Entry
,您可以将其替换为
for(myMap中的Entry)
,但通常需要这两个属性。这就是解构使您不受语法干扰的地方。

您还可以将componentN函数定义为非数据类的扩展,如下所示:

operator fun Location.component1() = latitude
operator fun Location.component2() = longitude
当您想要处理位置列表时,您可以这样写:

for ((lat, lon) in locations) {
    ......
}
在Kotlin中分解声明的意义是什么

结构化或构造是从不同变量中的值创建对象。反结构则相反,从现有对象中将值提取到变量中

Kotlin哲学的一部分是简洁,因为代码越简单、越简洁,您就越快理解所发生的事情。解构提高了可读性,这是简洁的一部分。比较下面两个片段(让我们考虑类)

不使用解构

fun getFullName()=三重(“托马斯”、“阿尔瓦”、“爱迪生”)
val result=getFullName()
val first=result.first
val middle=result.second
val last=结果。第三
使用解构

fun getFullName()=三重(“托马斯”、“阿尔瓦”、“爱迪生”)
val(第一、中间、最后)=getFullName()
还可以利用解构从中提取

aMap中((键、值)的
{
/* ... */
}

从一个函数返回两样东西只是一个简单的用例。该功能本身被用于更多的场合,并且被证明是有用的和可维护的。“那里应该有一个类”——如果你只有j、a、v、a、锤子,那么一切看起来都像c、l、a、s、s、e、s、钉子。另一种语言——不同的习语。还有,@voddan所说的。解构声明确实需要Kotlin中的类。我认为它的主要目的是提供简单性,而不是提供多个返回值。大多数用例都在中演示。@GKh,我已经为您的问题添加了一个答案,我希望这能拓宽您的知识:)。请谨慎使用,如果您通过交换对象中的两个变量xCoordinate和yCoordinate来重构->组件1和组件2将被切换->您的
val(x,y)
实际上将是
val(y,x)
这里到处都是bug。使用ctrl+f6或cmd+f6重构工具可以正确处理这个问题。