这三个Kotlin扩展函数是否等价?有无行为上的细微差异?
这三个Kotlin扩展函数是否等价?
这三个transform扩展函数行为完全一致,最终都会返回一个用当前EntityObject的id和label(对应DtoObject的description)初始化的实例。下面逐个拆解细节:
第一个写法里的
apply完全是多余的:apply的本意是对当前对象执行一段逻辑后返回对象本身,但这里在apply的lambda里直接用return返回了DtoObject,等于绕过了apply的原有逻辑,和直接返回实例没有区别。这种写法只会额外增加一层无意义的代码包装,反而容易让其他开发者误解有额外操作,不推荐。第二个是标准的代码块函数体写法,用显式的
return返回结果,逻辑直白清晰,是新手最容易理解的写法。第三个是Kotlin的表达式函数体语法糖:当函数的逻辑可以用单个表达式完成时,就可以省略大括号和
return,编译器会自动把表达式的结果作为函数返回值。这种写法和第二个完全等价,但更简洁紧凑,是Kotlin里推荐的写法。
总结:三者行为无差异,但从代码简洁性和可读性来看,优先选第三种,其次是第二种,第一种属于冗余写法,建议避免。
内容的提问来源于stack exchange,提问作者Gary Barker
相关产品推荐
相关产品推荐

