kotlin - Kotlin 中的 "if"与 "takeIf"?

标签 kotlin

以下两种实现方式哪一个更好:

1.使用“if”

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/

相关文章:

spring-boot - 在Kotlin/Spring Boot中使用Gradle属性扩展

android - 在不破坏底部 Activity 的情况下返回一些 Activity

java - 如何在 map 标记(汽车)周围放置进度条

java - 在反向代理后面访问 ElastiC

java - Android:如何禁用选项卡选择时的默认弹出 TabLayout 动画

kotlin - 从 kotlin 中的给定数组返回一个单词

java - 避免与 Kotlin 泛型内联

string - 是否有正则表达式可以切换字符串中的字符大小写?

reactjs - 我如何在 Kotlin.js 中使用 Redux/React?

java - android:background不适用于Theme.MaterialComponents