如果没有括号,苹果在Kotlin if语句中是否可能出现bug?

时间:2019-05-22 08:30:19

标签: kotlin kotlinc

想象一下科特林:

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

我总是使用大括号(see Apples goto fail)来阅读!

  

规则1.3.a

     

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

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

1 个答案:

答案 0 :(得分:1)

您给出的示例并不明确;它只有一个合理的意义。而且它与您链接到的问题完全不同(根本不涉及else子句。)所以我不确定您要问什么。

Kotlin在解释if(和else)方面与大多数类似C的语言相似。因此严格来说,这种错误仍然是可能的。但是Kotlin具有两个功能,可以减少发生此类问题的风险。

首先,与C和Java及类似语言不同,if可以用作表达式(返回值)。当以这种方式使用时,编译器确保每个分支都返回一个值。如果多个分支之间有任何混淆,通常会导致编译器错误。

第二个是when结构,其功能类似于C / Java switch语句,但是避免掉线,因此不需要break。它也可以用作表达式,强制执行一条路径和一个返回值。

因此,在Kotlin中,链接代码最好用when编写,这样会更简单,而且可以防止发生此类错误。

尽管如此,我最终并不认为这确实具有可比性。链接的代码是低级C,它的实践和限制与常规应用程序代码完全不同。特别是,使用goto进行错误清除在本质上很容易出错。而且,如果他们正确使用了else分支,那将使代码更加清晰并防止出现此错误。

只要有足够的决心,就有可能用任何语言编写错误的代码!好的语言可以使编写好的代码更容易,而编写不好的代码则更加困难。 (而且我认为Kotlin在这方面得分很高。)