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,我有这段验证代码,不认为它符合好Kotlin的精神 在这段代码中,我将数据类内容与networker:networker和worker:networker进行比较 如何使用更好、更优雅的Kotlin代码来改进这一点请如果优雅是您主要关心的问题,那么您可以这样编写 worker.name = networker.name ?: worker.name worker.lastName = networker.lastName ?: worker.lastName worker.phone = net

我有这段验证代码,不认为它符合好Kotlin的精神

在这段代码中,我将数据类内容与networker:networker和worker:networker进行比较


如何使用更好、更优雅的Kotlin代码来改进这一点请

如果优雅是您主要关心的问题,那么您可以这样编写

worker.name = networker.name ?: worker.name
worker.lastName = networker.lastName ?: worker.lastName
worker.phone = networker.phone ?: worker.phone
worker.email = networker.email ?: worker.email

这与您的代码将值从networker复制到worker的结果相同,除了空值,但我认为它看起来更好。

因为下面的条件赋值是没有意义的

if (X != Y) {
    Y = X
}
由于没有此检查,赋值的结果将是相同的,因此可以忽略它,而只通过.let{}保持空检查


除了在其他答案中所提到的低级改进之外,我也会考虑你把这些代码放在哪里。

由于所有这些行都完成了一项任务——从一个对象更新另一个对象——因此将它们捆绑到一个函数中是有意义的;这不仅可以清楚地将它们关联起来,还可以让您给它们一个描述性的名称

最明显的地方是数据类本身内部;可能是一个名为UpdateFromomer:Networker的方法,该方法更新它所调用的对象。这将使调用方清楚地知道哪个对象正在发生变化


但是,有时您希望将数据类保留为简单的数据持有者,或者对它们没有控制权。在这种情况下,它可能是一个扩展函数。

我正在比较这两个类,因为其中一个可能已更改,查看它是否更改与查看新字段是否为null背景一样重要:我正在使用doAjaxPost或js脚本从spring/thymeleaf HTML获取更改或不更改的类,但HTML表单中的字段设置为null,并在我持久化它时覆盖数据集,通过上面的测试,我只在测试更改和null后将更改的数据复制到原始数据,然后将其持久化,以保留HTML中未使用的其他字段。我想你是对的,不需要更改测试。有趣的想法,我喜欢这样做,但还没有足够的经验来实现它,你能给我指一些示例/课程吗
if (X != Y) {
    Y = X
}
networker.name?.let { worker.name = it }
networker.lastName?.let { worker.lastName = it }
networker.phone?.let { worker.phone = it }
networker.email?.let { worker.email = it }