fun main() {
println(mix(Color.RED, Color.YELLOW));
}
fun mix(c1: Color, c2: Color) =
when (setOf(c1, c2)) {
setOf(Color.RED, Color.YELLOW) -> Color.ORANGE
setOf(Color.YELLOW, Color.BLUE) -> Color.GREEN
setOf(Color.BLUE, Color.VIOLET) -> Color.INDIGO
else -> throw Exception("Dirty color")
}
- setOf는 소스를 까보면..
public fun <T> setOf(vararg elements: T): Set<T> = if (elements.size > 0) elements.toSet() else emptySet()
요소들을 Set 자료구조에 담기도록 설정해놓고 있다.
- when은
- 동등성 검사
- else 분기
- 스위치 문의 default: 역할을 하는 것 같다
인자가 없는 when
fun mixOptimized(c1: Color, c2: Color) {
when {
(c1 == Color.RED && c2 == Color.YELLOW) ||
(c1 == Color.YELLOW && c2 == Color.RED) ->
Color.ORANGE
(c1 == Color.YELLOW && c2 == Color.BLUE) ||
(c1 == Color.BLUE && c2 == Color.YELLOW) ->
Color.GREEN
(c1 == Color.BLUE && c2 == Color.VIOLET) ||
(c1 == Color.VIOLET && c2 == Color.BLUE) ->
Color.INDIGO
else -> throw Exception("Dirty color")
}
}
- when 에 인자를 넣지 않고 , 각 분기의 조건을 불리언 식으로 평가한다.
인자 없는 when
의 장단점
- 장점
- 추가 객체 생성 없이
- 각 조건을 직접 평가한다.
- 성능 최적화에 이점이 있다는데, 사실 미미할 것 같다.
- 단점
- 딱 봐도 코드 가독성이 저해된다.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린인액션] 프로퍼티 (0) | 2023.11.23 |
---|---|
[코틀린인액션] enum (0) | 2023.11.23 |
[코틀린인액션] 스마트 캐스트 (0) | 2023.11.23 |
[코틀린인액션] 스마트 캐스트 (0) | 2023.11.23 |
[코틀린인액션] if 와 when 사용 (0) | 2023.11.23 |