Closed. This question is opinion-based 。它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文来回答。

3年前关闭。



Improve this question




以下两种实现哪个更好:

1.使用“如果”
fun f1(a: A?): R? {
    if (a != null) {
        val b = getB(a)
        if (b != null && b.f()) {
            val c = getC(b)
            if (c != null && c.f()) {
                return c.f2()
            }
        }
    }
    return null
}

2.使用“takeIf”和“let”
fun f2(a: A?): R? = a
        ?.let { getB(it) }
        ?.takeIf { it.f() }
        ?.let { getC(it) }
        ?.takeIf { it.f() }
        ?.let { it.f2() }

最佳答案

这是一个主观的问题。有些人喜欢一种版本,有些人喜欢另一种。
就个人而言,我认为这更具可读性:

fun f3(a: A?): R? {
    if (a == null) {
        return null
    }

    val b = getB(a)
    if (b == null || !b.f()) {
        return null
    }

    val c = getC(b)
    if (c == null || !c.f()) {
        return null
    }

    return c.f2()
}

关于kotlin - Kotlin 中的 "if"与 "takeIf"对比?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46173227/

10-10 20:08