сегодня я столкнулся со странным поведением в 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