2

我指的是 Kotlin 中的 Null-Safety

我的一个同事总是这样写道:

bob ?: return
bob.department ?: return
bob.department.head ?: return
bob.department.head.name()

可读性是他的论点。这对我来说不是很喜欢 Kotlin,而且过于繁琐。我当然更喜欢:

bob?.department?.head?.name()

一些不使用上层方式的参数/文档/链接会非常有帮助。

我想知道使用upper way是否有任何缺点?另外,我可以想象一些编译器优化不会很好地工作,做上面的方式?

编辑:根据 SVN,历史告诉我们:

if (bob != null) {
    if (bob.department != null) {
        if (bob.department.head != null) bob.department.head.name()
    }
}
4

1 回答 1

1

您的版本意味着不同的东西:如果任何相关值是null,则您的版本评估为null不评估表达式的其余部分,而您的同事的returns 立即不执行其余的函数。

(当然,如果那是函数的结尾,效果可能是一样的;如果没有看到一些上下文,我们无法判断。)

所以更喜欢哪一个取决于一个null值是否应该中止后面的所有内容。

不过,总的来说,根据我的经验,您的版本更为常见。它还有两个优点:它更简洁(当所有其他条件相同时,这是一件好事™恕我直言),重复更少(因此遵循DRY);当有人后来添加额外的行时,不太可能引起意外,因此他们不必回溯并找出他们没有被执行的原因。

至于可读性,像你这样的行在 Kotlin 中是一个常见的习惯用法,因此开发人员真的应该发现它们足够可读。事实上,避免像您的同事那样进行长链测试的能力(在 Java 中是必需的)是?.安全调用运算符的主要好处之一!

于 2020-07-22T11:37:54.400 回答