when의 인자(when 다음에 있는 괄호 안에 올 값)로는 임의의 식이 올 수 있다. 그리고 매치 조건(->의 왼쪽)에도 아무 값이나 올 수 있다(꼭 상수가 아니어도 된다).

    WhenExpressions/MatchingAgainstVals.kt

    import atomictest.*
    
    fun main() {
      val yes = "A"
      val no = "B"
      for (choice in listOf(yes, no, yes)) {
        when (choice) {
          yes -> trace("Hooray!")
          no -> trace("Too bad!")
        }
        // 'if'로 같은 로직을 표현한다
        if (choice == yes) trace("Hooray!")
        else if (choice == no) trace("Too bad!")
      }
      trace eq """
        Hooray!
        Hooray!
        Too bad!
        Too bad!
        Hooray!
        Hooray!
      """
    }

    when 식과 if 식은 기능이 겹치는 부분이 있지만, when이 더 유연하다. 따라서 선택의 여지가 있다면 when을 사용하는 것을 더 권장한다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.