0

想象一下在 Kotlin 中:

if (this) doThis()
else if(that) doThat()
else doWhatEver()

我一直在阅读使用大括号(请参阅 Apples goto fail)!

规则 1.3.a

大括号应始终围绕在 if、else、switch、while、do 和 for 语句之后的代码块(也称为复合语句);这些关键字后面的单个语句和空语句也应始终用大括号括起来。

Kotlin 编译器如何处理上述代码中缺少大括号的问题?我认为 Kotlin 可能足够聪明,可以避免失败?

4

1 回答 1

1

您给出的示例并不模棱两可;它只能有一个合理的含义。它与您链接到的问题(根本不涉及else子句)完全不同。所以我不确定您在问什么。

Kotlin 在解释if(和else)方面与大多数类 C 语言相似。所以严格来说,这种类型的错误仍然是可能的。但是 Kotlin 有两个特性可以降低此类问题的风险。

首先是,不像C和Java等类似语言,if可以用作表达式(返回值)。以这种方式使用时,编译器确保每个分支都返回一个值;如果围绕多个分支存在任何混淆,这通常会导致编译器错误。

其次是when结构,它的功能类似于 C/Javaswitch语句,但避免了失败,因此需要breaks;它也可以用作表达式,强制执行单个路径和单个返回值。

所以在 Kotlin 中,链接的代码最好用 a 编写when,这样会更简单,也可以防止这种类型的错误。

最终,我认为它没有可比性。链接代码是低级 C,与一般应用程序代码有很大不同的做法和限制。特别是,使用gotofor 错误清理本质上是容易出错的。如果他们else正确地使用了分支,它会使代码更加清晰,并防止出现这个错误。

如果你有足够的决心,任何语言都可能写出糟糕的代码!一种好的语言是一种使编写好代码更容易,而编写坏代码更难的语言。(而且我认为 Kotlin 在这方面的得分相当不错。) 

于 2019-05-22T11:03:43.040 回答