작성
·
509
3
안녕하세요! 이해가 쏙쏙 되도록 강의를 잘 해주셔서 정말 잘 듣고 있습니다.
"5강. 코틀린에서 제어문을 다루는 방법" 에서 궁금한 점이 있어 질문 드립니다.
when (값) 에서 값을 생략하면 ealry return 처럼 동작한다고 설명해주셨는데, 실제 코드를 수행하면 그렇게 동작하지 않는 것 같네요.
아래와 같이 println("xxx") 를 추가했을 때 early return 이라면 해당 코드가 동작하지 않아야 되는데 동작을 합니다.
fun judgeNumber2(number: Int) {
when {
number == 0 -> {}
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어지는 숫자는 홀수입니다")
}
println("이 코드가 동작하나요?")
}
실제 early return 으로 동작하려면 아래와 같이 when expression 을 통째로 return 해야 가능해 보입니다.
이렇게 하면 맨 아래 코드가 intellij 에서는 unreachable code 라고 뜨네요.
fun judgeNumber2(number: Int) {
return when {
number == 0 -> {}
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어지는 숫자는 홀수입니다")
}
println("이 코드가 동작하나요?")
}
혹시 제가 잘못 이해하고 있는 것인지 답변 부탁 드릴게요~~ ^^
답변 1
3
안녕하세요 우창호님!! 아이고~~ 너무나도 좋은 질문 감사드립니다!!! 😊
결론부터 말씀드리자면, 제 설명에 부족함이 있었던 것 같습니다!!! 제가 전달하고자 했던 when을 ealry return 처럼 사용할 수 있다는 의미는 이런 의미였습니다!!
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다") // (1)
number % 2 == 0 -> println("주어진 숫자는 짝수입니다") // (2)
else -> println("주어지는 숫자는 홀수입니다") // (3)
}
}
위와 같은 코드에서 judgeNumber2(0)
을 사용하는 경우에
첫 번째 when 구문에 걸려 "주어진 숫자는 0입니다"가 출력되고 나머지 when은 무시되는데요
이러한 동작이 마치 첫 번째 when 구문만 실행하고 return 한 것처럼 동작하기에 ealry return
처럼 동작한다고 표현했습니다..!!!
또 다른 예를 들어 보면,
fun judgeNumber2(number: Int) {
when {
number % 2 == 0 -> println("주어진 숫자는 2의 배수입니다") // (1)
number % 3 == 0 -> println("주어진 숫자는 3의 배수입니다") // (2)
number % 6 == 0 -> println("주어진 숫자는 6의 배수입니다") // (2)
}
}
위와 같은 코드에서 judgeNumber(6)
을 호출할 경우에 "주어진 숫자는 2의 배수입니다"만 출력되고 나머지 when은 무시되어 when 자체가 종료되게 됩니다. 이 부분이 첫 번째 구문 실행 이후 return 되어 나머지 구문이 무시된 것처럼 느껴졌습니다!!!
다만, 창호님께서 짚어주신것처럼 함수 자체가 when에 의해 끝나는(=return되는) 것은 아닙니다!! 🙏
when 자체에서 함수가 완전히 끝나게 하려면 여러 방법이 있겠지만, 아래와 같이 쓸수 있을 것 같습니다!! 😊
fun judgeNumber2(number: Int) {
when {
number == 0 -> {
println("주어진 숫자는 0입니다") // (1)
return
}
number % 2 == 0 -> {
println("주어진 숫자는 짝수입니다") // (2)
return
}
}
println("주어지는 숫자는 홀수입니다")
println("여기가 실행됩니다!!")
}
when 절의 각 구문에는 여러줄이 들어갈 수 있기 때문에 { }
을 사용해 return을 적어주는 방법입니다!!
만약 else부분까지 return을 사용하게 되면 when의 모든 경우에서 return이 되기에 when절 아래로 아예 내려 주었습니다!
정말 좋은 포인트 짚어주셔서 감사드립니다!! 🙏
언제든 궁금하신 내용 있으시면 편하게 질문 남겨주세요!! 감사합니다! 🙇
네네~ 잘 이해되었습니다~ 도움이 많이 되었네요!
감사합니다!