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