我将如何用惯用的 Kotlin 写这个?

Ban*_*Nam 0 kotlin

我有一些代码:

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 写这个?

Mik*_*x6r 5

我不确定争论的来源,但更简洁的解决方案是

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非空,否则左侧==做出决议nullnull != true,所以它会centerX()从 else返回。

类似地,如果 arguments 为非空,则将使用 的结果containsKey来解析。

现在只有一种表达式,可以使用主体表达式格式。