最後の else 分岐がドット修飾または二項式の一部になっている連鎖した if 式を報告します。
これは予期しない動作を引き起こす可能性があります。なぜなら、最も内側にある if-else 式のみが外側の式のレシーバーか左オペランドになるためです。これは、意図したロジックに沿わない可能性があります。
例:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
fun main() {
printNumberSign(1) // 'let' のレシーバーが内側の 'if-else' 式のみであるため、何も出力されません
}
1 つ目のクイックフィックス (when への変換) を適用した後:
fun printNumberSign(num: Int) {
when {
num > 0 -> {
"positive"
}
num < 0 -> {
"negative"
}
else -> {
"zero"
}
}.let { print(it) }
}
fun main() {
printNumberSign(1) // "positive" が出力されます
}
あるいは、2 つ目のクイックフィックスによって明確化するための波括弧を追加し、元のセマンティクスを保持しながらネストした else 分岐を明示的にすることができます:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else {
if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
}
fun main() {
printNumberSign(1) // 何も出力されませんが、コードがより明確になりました
}