코틀린/코틀린인액션
[코틀린인액션] when 과 임의의 객체
OverTheHorizon3410
2023. 11. 23. 23:46
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