我使用Kotlin的时间不长,但我遇到了使用这些模式的代码库,我想知道这3个扩展函数是否等效,或者行为上是否存在一些微妙的差异?

fun EntityObject.transform(): DtoObject {
    this.apply {
        return DtoObject(
            id = id,
            description = label
        )
    }
}
fun EntityObject.transform(): DtoObject {
    return DtoObject(
        id = id,
        description = label
    )
}
fun EntityObject.transform() = DtoObject(
        id = id,
        description = label
)

推荐答案

行为没有区别.

从可读性的Angular 来看,第一个在几个不同的方面显得迟钝和过于复杂.(使用apply而不是run来创建/返回其他内容,首先不必要地使用范围函数,并且从范围函数内的外部函数返回,因此代码执行顺序变得复杂.)

Kotlin相关问答推荐

来自SnapshotFlow的单元测试StateFlow仅发出initialValue

在Webflux应用程序中通过kotlin协程启动fire and forget job

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

在Kotlin lambda的参数中如何指定函数类型?

如何在数据类中删除空格 (String)?

列表在 android WebView 中没有正确迭代

使用调度程序运行异步 Kotlin 代码

如果带注释的成员未被特定块包围,则发出 IDE 警告

Kotlin Path.useLines { } - 如何不获取 IOException("Stream closed")?

具有泛型类型的 Kotlin 密封接口不会为其子类型推断约束

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

KMM:编译失败:意外的 IrType 类型:KIND_NOT_SET

从代码块执行和返回(在 Elvis 运算符之后)

Mockito 的 argThat 在 Kotlin 中返回 null

有没有办法在数据类构建时转换属性的值?

如何根据ArrayList的对象属性值从中获取最小/最大值?

如何修复未解析的参考生命周期范围?

Kotlin:访问 when 语句的参数

类型推断失败:RecyclerViewActions.scrollTo()

Kotlin 中的限制函数