Kotlin中的'a?.let {}?:run {}`是惯用语言吗?

时间:2018-09-27 14:16:22

标签: kotlin kotlin-null-safety

我在S.O中看到以下评论。帖子,我很感兴趣:

  

为什么不使用null进行检查? a?.let{} ?: run{}仅在极少数情况下适用,否则就不是惯用语–伏特丹(Voddan)16年5月15日在7:29 best way to null check in kotlin?

为什么该构造“仅在少数情况下适用”?
Kotlin的首席工程师说,

  

run允许您在Elvis运算符https://stackoverflow.com/a/51241983/6656019

的右侧使用多个语句

尽管我承认实际上并没有认可它是惯用的。这两个职位似乎都是受人尊敬的S.O. Kotlin贡献者。
激发原始评论的帖子提到,如果let是可变的,则表达式的a部分非常重要。在这种情况下,您将需要a?.let{} ?: run{}而不是if{} else {}

我发现我喜欢“让Elvis运行”的构造。在大多数情况下应该避免使用它吗?
感谢您的任何见识。

1 个答案:

答案 0 :(得分:4)

  

在这种情况下,您需要一个?.let {}?:run {}而不是if {} else {}

否,您可以省略run { statement }的运行部分并使用a?.let{} ?: statement

  

在大多数情况下应该避免吗?

您应在需要时使用它。例如。当您想在那种情况下运行多个语句时。需要指出的是,这种情况很少见。通常,您会在elvis运算符的右侧仅看到一条语句。
当然,当您不需要它时也不要使用它。保持代码简单。