반응형
if문
fun validationScoreIsNotNegative(score: Int) {
if (score < 0) {
throw IllegalArgumentException("${score}이 0보다 작습니다.")
}
}
자바와 비교하면 코틀린에서는 void가 생략되었다. 대신 Unit이 존재하는데 Unit을 생략할 수 있다.
이후 Exception을 생성할 때 new를 사용하지 않았다.
나머지는 자바와 별반 다르지 않는다.
fun getPassOrFail(score: Int): String {
if (score >= 50) {
return "P"
} else {
return "F"
}
}
Expression , Statement
자바에서 if-else는 Statement이지만 코틀린에서는 Expression이다.
Statement는 하나의 프로그래밍 문장으로 취급되어 값으로 취급될 수 없다.
하지만 Expression은 값으로 도출되는 문장을 의미한다.
조건문을 변수에 담을 수 있다는 건가요?
fun getPassOrFail(score: Int): String {
var a = if (score >= 50) {
return "P"
} else {
return "F"
}
}
오류가 나지 않는다..???
fun getPassOrFail(score: Int): String {
return if (score >= 50) {
return "P"
} else {
return "F"
}
}
그래서 코틀린에서는 if-else를 표현식으로 처리하기 때문에 삼항 연산자가 존재하지 않는다.
또한 범위에 대한 체크를 진행할 때 in을 사용할 수 있다.
if (score !in 0..100) {
throw IllegalArgumentException("${score}이 0보다 작습니다.")
}
if (score in 0..100) {
throw IllegalArgumentException("${score}이 0보다 작습니다.")
}
switch, when
코틀린에서는 switch문이 사라졌다? 대신 when을 사용한다.
fun getGradeWithSwitch(score: Int): String {
return when (score / 10) {
9 -> "A"
8 -> "B"
else -> "C"
}
}
문법이 되게 신기하다.
fun getGradeWithSwitch(score: Int): String {
return when (score) {
in 90..99 -> "A"
in 80 .. 89 -> "B"
else -> "C"
}
}
특정 값일 때 분기하거나, 범위를 통해 분기가 가능하다.
그럼 조건을 변수로 저장했다가 사용하는 것도 가능할 것 같다.
여러 개의 조건을 동시에 검사할 수도 있다.
fun getGradeWithSwitchV2(score: Int): Unit {
when (score) {
1, 0, -1 -> println("1, 0 ,-1")
}
when{
score == -2 -> println("-2")
}
}
when을 early return으로 사용할 수 있다. 그래서 값이 있으면 값에 매칭 되는지 확인하고 없다면 when 내부 조건 자체를 살펴보고 수행을 하게 된다.
그리고 when은 Enum Class, Sealed Class와 함께 사용하면 더욱 좋다. 다음에 해당 클래스를 공부할 때 알아보자.
반응형
댓글