마지막 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' 표현만 해당되어 아무것도 출력되지 않습니다.
}
첫 번째 빠른 수정( when으로 변환 후 ) :
fun printNumberSign(num: Int) {
when {
num > 0 -> {
"positive"
}
num < 0 -> {
"negative"
}
else -> {
"zero"
}
}.let { print(it) }
}
fun main() {
printNumberSign(1) // "positive"를 출력합니다.
}
대안으로, 두 번째 빠른 수정은 중첩된 else 분기를 명시적으로 하여 원래의 의미를 유지하면서 명확히 하기 위해 중괄호를 추가합니다:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else {
if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
}
fun main() {
printNumberSign(1) // 출력되지 않지만 코드는 더 명확합니다.
}