Kotlin 换行符的总和 — 结果取决于运算符的位置



今天我在 Kotlin 中遇到了一种我无法解释的奇怪行为。给定以下代码:

data class Data(
val v1: Int,
val v2: Int,
val v3: Int)
fun main() {
val d = Data(1,1,1)
val sum1 = d.v1 + d.v2 + d.v3
println("Oneliner: $sum1") // prints: Oneliner: 3
val sum2 = d.v1 
+ d.v2 
+ d.v3
println("OperatorFirst: $sum2") // prints: OperatorFirst: 1
val sum3 = d.v1 + 
d.v2 + 
d.v3
println("OperatorLast: $sum3") // prints: OperatorLast: 3
}

(可测试时间:https://pl.kotl.in/gMjif_6FO(

现在,这似乎取决于您放置+运算符的位置,以获得正确的结果 3。但是,IDE没有显示第二个版本可能有任何问题,我找不到有关为什么这种情况会有所不同的任何信息。

关于软件工程领域的一个问题还说,一些编码指南建议将操作员放在行的开头:https://softwareengineering.stackexchange.com/questions/93670/line-break-before-after-operator

此外,我能找到的对这种行为的唯一解释是,行开头的+被解释为一元加号运算符。 https://www.programiz.com/kotlin-programming/operators#unary 然而,即使这样对我来说也没有意义val

这是您为可选分号付出的代价。安德烈·布雷斯拉夫(Andrey Breslav(在他的一次演讲中说,这是预期的行为。像 + 或 * 这样的二元运算符应该放在顶线上,而不是底线上。如果要将它们放在底线上,请使用括号:

val sum = (1
+ 1 
+ 1)
println(sum) // prints: 3

最新更新