まくまくKotlinノート
演算子の前後で改行したいときは必ず後ろで改行する
2019-12-04

Kotlin のコードにおいて、演算子の前後で改行をするときは、改行位置に気を付けないといけません。 不可解な不具合に悩まされたので戒めのためにメモ。

問題:次のコードを実行すると何と表示されるでしょう?

fun getVal() = 1

fun main() {
    val x = 100 -
        getVal()

    val y = 100
        - getVal()

    println(x)
    println(y)
}

答えは、

99
100

です。

y の計算式の方は、末尾が演算子で終わっていないので、次の行まで計算式が続いているとみなされません。 その次の行は、getVal() が返した値に単項演算子の - を適用するだけの意味のないコードになります。

だから、Kotlin のコードにおいて、長い計算式を記述する場合は、必ず演算子の後で改行するように注意しなければいけません。 Java の場合は、セミコロンが出てくるまで式が続いているとみなされるので、このようなミスは発生しませんでした。

ちなみに Ruby も同じで、演算子の後ろで改行しなければいけません。

Ruby

x = 100 -
  1
y = 100
  - 1
puts x  #=> 99
puts y  #=> 100

Python の場合は、そもそも演算子の前後で改行しようとするとエラーになりますね。 バックスラッシュを入れれば連結できますが。

Python

x = 100 - \
    1
y = 100 \
    - 1
print(x)  #=> 99
print(y)  #=> 99
2019-12-04