[코틀린인액션] when 과 임의의 객체

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