在没有大括号的Kotlin if语句中是否可能出现Apple goto错误?

在没有大括号的Kotlin if语句中是否可能出现Apple goto错误?,kotlin,kotlinc,Kotlin,Kotlinc,想象一下在科特林: if (this) doThis() else if(that) doThat() else doWhatEver() 我总是用大括号阅读 规则1.3.a 支撑应始终围绕代码a.k.a.复合块 语句,后跟if、else、switch、while、do和for 声明;下面是单语句和空语句 关键字也应始终被支架包围 Kotlin编译器如何处理上述代码中大括号的缺失?我认为科特林可能足够聪明,可以避免这方面的失败?你给出的例子并不含糊;它只能有一个合理的含义。它与你所联系的问题有

想象一下在科特林:

if (this) doThis()
else if(that) doThat()
else doWhatEver()
我总是用大括号阅读

规则1.3.a

支撑应始终围绕代码a.k.a.复合块 语句,后跟if、else、switch、while、do和for 声明;下面是单语句和空语句 关键字也应始终被支架包围


Kotlin编译器如何处理上述代码中大括号的缺失?我认为科特林可能足够聪明,可以避免这方面的失败?

你给出的例子并不含糊;它只能有一个合理的含义。它与你所联系的问题有很大的不同,你所联系的问题根本不涉及其他条款。所以我不确定你在问什么

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

首先,与C、Java和类似语言不同,if可以用作返回值的表达式;如果对多个分支有任何混淆,这通常会导致编译器错误

第二个是when结构,它的功能类似于C/javaswitch语句,但避免了失败,因此不需要中断;它还可以用作表达式,强制执行单个路径和单个返回值

因此,在Kotlin中,链接代码最好是用when编写的,这样会更简单,并且可以防止这种类型的错误

最终,我不认为它真的具有可比性。链接的代码是低级C,与一般的应用程序代码有着非常不同的实践和限制。特别是,使用goto进行错误清理本质上是容易出错的。如果他们正确地使用了else分支,这将使代码更加清晰,并防止此错误


如果你有足够的决心,任何语言都有可能写出糟糕的代码!一门好的语言可以让编写好代码变得更容易,而编写坏代码则更难。我认为Kotlin在这方面的成绩相当不错。

那就是C。Kotlin编译器是完全不同的。要回答为什么Kotlin没有失败,可能需要整整一学期的编译器课程,几年的现场经验和对Kotlin资料的挖掘。我现在投票结束这个问题,因为它太宽泛了。也许这是一个愚蠢的问题,或者我不太理解你的问题,但仍然是:你为什么不自己试试?如果我理解了这个问题,您可以运行代码并在那里放置一些println,看看它的作用。@glee8e-Kotlin编译器完全不同。为了回答为什么Kotlin没有失败是的,我希望能找到一篇关于这一点的科技文章的链接:D。。