我有一些代码:
private fun getTouchX(): Int {
arguments ?: return centerX()
return if (arguments.containsKey(KEY_DOWN_X)) {
arguments.getInt(KEY_DOWN_X)
} else {
centerX()
}
}
private fun centerX() = (views.rootView?.width ?: 0) / 2
Run Code Online (Sandbox Code Playgroud)
我想缩短它。
在函数 getTouchX 中,有两个重复的返回条件。(这是centerX)
我试图这样做:
private fun getTouchX(): Int {
if (arguments == null || !arguments.containsKey(KEY_DOWN_X)) {
return centerX()
}
return arguments.getInt(KEY_DOWN_X)
}
Run Code Online (Sandbox Code Playgroud)
然而,它看起来更像是 Java 而不是 Kotlin。
我怎么能用惯用的 Kotlin 写这个?
我不确定争论的来源,但更简洁的解决方案是
private fun getTouchX(): Int =
if(arguments?.containsKey(KEY_DOWN_X) == true) {
arguments.getInt(KEY_DOWN_X)
} else {
centerX()
}
Run Code Online (Sandbox Code Playgroud)
该if只要求containsKey如果arguments非空,否则左侧==做出决议null。null != true,所以它会centerX()从 else返回。
类似地,如果 arguments 为非空,则将使用 的结果containsKey来解析。
现在只有一种表达式,可以使用主体表达式格式。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |