Kotlin 中 else if 与 if 表达式陷阱

相关概念:kotlin

Kotlin 里最容易让人掉坑的一类代码,不是语法报错,而是“看起来像 Java,结果语义边界其实不一样”。

坑在哪里

if 被当成表达式使用时,后面再接 ?.let { ... } 这类调用,很容易让人误以为整段 if / else if / else 都是同一个整体。

但真正需要警惕的是:

  • Kotlin 的 if 是表达式
  • else if 本质上仍然可以理解为 else 后跟了另一个 if
  • 后续链式调用绑定到哪里,取决于表达式边界

为什么这个坑特别像“看不出来”

因为从视觉上看,它很像熟悉的 if / else if / else 连续结构。

但一旦和表达式返回值、空安全调用、扩展函数链在一起,实际结合范围就可能跟直觉不一致。

写法

如果分支本质上是在做“多路选择”,优先考虑:

  • when
  • 或者显式加括号,把表达式边界圈清楚

结论

这个问题的重点不是“语法有没有 else if”,而是:

在 Kotlin 里,看到 if 时要先问自己,它现在是语句,还是表达式。

一旦忘了这件事,后面连着 letalsotakeIf 这类调用时就很容易写出视觉正确、语义跑偏的代码。