작성
·
106
·
수정됨
2
강사님 안녕하세요.
우선, 좋은 강의 감사합니다.
19강.코틀린의 이모저모 학습 중 이해되지 않는 부분이 있어서 질문드립니다.
takeIf
을 설명하실 때
getNumberOrNull
함수와 getNumberOrNullV2
함수가 동일한 코드라고 설명해주셨는데요.
강의에서 takeIf
확장 함수는 주어진 조건을 만족하면 그 값을, 만족하지 않는다면 null
을 반환한다고 설명해주셨는데, 그러면 getNumberOrNull
함수의 반환 값이 반대로 된 것이 아닌가요?
오히려 getNumberOrNull
함수는 takeUnless
를 사용하는 getNumberOrNullV3
함수와 동일하다고 생각됩니다.
저는 아래와 같이 이해했는데.. 혹시 제가 잘못 이해한건지, 아니면 강의자료에 오타가 있으신건지 궁금합니다~~
// takeIf 구현
fun getNumberOrNull(): Int? {
return if (number <= 0) number // 해당 조건이 맞으면 해당 값을 반환
else null // 아니면 Null을 반환
}
답변 1
1
안녕하세요! LEE-YOONSEON님! 🙂 질문 주셔서 감사합니다!
결론부터 말씀드리면 강의 자료가 맞습니다!
잘 보시면 takeIf에는 조건이 it > 0
으로 되어 있습니다. 즉, number
가 양수일 때 number
를 반환하는 것이죠
그리고 if else 문으로 되어 있는 코드 또한 number
가 양수일 때 number
를 반환하도록 되어 있습니다.
fun getNumberOrNull(): Int? {
return if (number <= 0) {
null
} else { // 양수일 때 nuber 반환
number
}
}
실제로 아래 코드를 돌려보시면 쉽게 확인할 수 있습니다!
fun main() {
println(getNumberOrNull(3)) // 3
println(getNumberOrNull(-1)) // null
println(getNumberOrNullV2(3)) // 3
println(getNumberOrNullV2(-1)) // null
}
fun getNumberOrNull(number: Int): Int? {
return if (number <= 0) {
null
} else {
number
}
}
fun getNumberOrNullV2(number: Int): Int? {
return number.takeIf { it > 0 }
}
추가로 여기서 드러나는 사실 한 가지가 있는데요!
Kotlin에서 제공하는 기능이 있더라도 기존의 if else문의 가독성이 더 좋은 경우가 있다는 것입니다.
특히 takeIf
, takeUnless
혹은 scope function
을 썼을 때보다 전통적인 방식을 사용하는 것이 더 간결할 때가 있죠.
답변이 도움이 되었으면 좋겠습니다.
감사합니다! 🙏
앗... 조건을 제대로 확인 못했네요.. 답변 감사합니다!
추가로 상황 마다 다르겠지만, 강의에서 말씀하셨던 것과 같이 코틀린에서 제공하는 기능이 있더라도 가독성이 더 좋은 경우를 생각하면서 좋은 코드를 작성해보도록 하겠습니다ㅎㅎ