3.3.3 when 문과 여럿 중에 하나 선택하기
if 문은 두 가지 가능성 중 하나를 선택하게 해준다. 이런 if 문을 연쇄적으로 여러 개 사용하면 관심 대상인 조건을 순차적으로 검사하면서 여럿 중 하나를 선택할 수 있다. 임의의 어떤 정수를 그에 대응하는 16진 숫자로 바꾸고 싶다고 하자.
fun hexDigit(n: Int): Char { if (n in 0..9) return '0' + n else if (n in 10..15) return 'A' + n – 10 else return '?' }
하지만 코틀린은 여러 대안 중 하나를 선택할 수 있는 더 간결한 대안인 when을 제공한다. 이 기능을 사용하면 앞의 예제를 다음과 같이 다시 쓸 수 있다.
fun hexDigit(n: Int): Char { when { n in 0..9 -> return '0' + n n in 10..15 -> return 'A' + n – 10 else -> return '?' } }
기본적으로 when 문은 when 키워드 다음에 블록이 온다. 블록 안에는 조건 -> 문 형태로 된 여러 개의 가지와 else -> 문 형태로 된 한 가지가 있을 수 있다. 각 문장은 다음 규칙에 의해 작동한다. 프로그램은 코드에 쓰여져 있는 순서대로 조건을 검사해서 맨 처음으로 참으로 평가되는 조건을 찾는다. 이런 조건이 있으면 프로그램은 이 조건에 대응하는 문을 실행한다. 만약 모든 조건이 거짓이라면 else 부분을 실행한다(물론 else 가지가 없으면 그냥 when 문이 끝난다).
IDE 팁 ≡
인텔리J 플러그인은 문맥에 따라 내포된 if와 when을 서로 변환해주는 기능을 제공한다. 이를 위해서는 if/when 키워드 위에 캐럿을 위치시킨 후 Alt + Enter를 누르고 if를 when으로 바꿔주는 Replace if with when이나 when을 if로 바꿔주는 Replace when with if 액션을 선택하면 된다.