Contents
조건식
If 표현식
java와 달리 Kotlin에서는 변수에 값을 할당할 때 if-else if-else 표현식으로도 저장이 가능하므로 삼항연산자를 사용할 필요가 없다.
max = if (a > b) a else b
val maxLimit = 1
val maxOrLimit = if (maxLimit > a) maxLimit else if (a > b) a else b
if 표현식의 분기는 블록 처리할 수도 있다. 또, 값을 반환하거나 변수에 값을 할당하는 경우에 if 표현식을 사용할 경우 else 분기는 필수로 사용되어야 한다.
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
when 표현식
when 표현식은 일부 분기 조건을 만족할 때까지 모든 분기에 대한 argument를 순차적으로 매칭시킨다.
when은 표현식이나 명령문으로 사용될 수 있다. 표현식으로 사용되는 경우 첫 번째 일치하는 분기의 값이 전체 표현식의 값이 되고, 명령문으로 사용되는 경우 개별 분기의 값은 무시된다. if 와 마찬가지로 각 분기는 블록이 될 수 있으며 해당 값은 블록의 마지막 표현식 값이다.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
when 표현식은 컴파일러가 가능한 모든 경우가 분기 조건으로 처리된다는 것을 증명할 수 없는 한 else 분기는 필수이다.
enum class Color {
RED, GREEN, BLUE
}
when (getColor()) {
Color.RED -> println("red")
Color.GREEN -> println("green")
Color.BLUE -> println("blue")
}
when (getColor()) {
Color.RED -> println("red")
else -> println("not red")
}
여러 경우에 대한 공통 동작을 수행하고 싶다면 ,(쉼표)를 사용하여 한줄로 정의하면 된다.
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
상수 뿐만 아니라 임의의 표현식도 사용할 수 있다.
when (x) {
s.toInt() -> print("s encodes x")
else -> print("s does not encode x")
}
범위 연산자 in을 사용하여 범위 값이나 컬렉션을 확인할 수 있다.
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
is 연산자를 사용하여 특정 유형의 값을 확인할 수 있다. 또, 스마트한 캐스팅으로 추가 확인 없이 해당 유형의 메서드 및 속성에 액세스 할 수 있다.
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
when은 if-else if 구문을 대체하여 사용할 수 있다.
when {
x.isOdd() -> print("x is odd")
y.isEven() -> print("y is even")
else -> print("x+y is odd")
}
when은 아래 코드처럼 함수의 본문이 될 수 있다. when에서 선언된 변수의 범위는 when 본문 안에서만 제한된다.
fun Request.getBody() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin 배우기 (2) (1) | 2024.02.01 |
---|---|
Kotlin 배우기 (1) (0) | 2024.02.01 |
[Kotlin 기초 2] Objects (3) (9) | 2023.02.17 |
[Kotlin 기초 2] Objects (2) (6) | 2023.02.09 |
[Kotlin 기초 2] Objects (1) (4) | 2023.02.09 |
댓글