마지막 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) // 출력되지 않지만 코드는 더 명확합니다.
}