더북(TheBook)

when에는 인자를 취하지 않는 특별한 형태도 있다. 인자가 없으면 각 매치 가지를 Boolean 조건에 따라 검사한다는 뜻이다. 따라서 인자가 없는 when에서는 화살표 왼쪽의 식에 항상 Boolean 타입의 식을 넣어야 한다. 예를 들어 ‘아톰 9, 수 타입’에서 봤던 bmIMetric()if 대신 when을 써서 다시 작성해보면 다음과 같다.

WhenExpressions/BmiWhen.kt

package whenexpressions
import atomictest.eq

fun bmiMetricOld(
  kg: Double,
  heightM: Double
): String {
  val bmi = kg / (heightM * heightM)
  return if (bmi < 18.5) "Underweight"
    else if (bmi < 25) "Normal weight"
    else "Overweight"
}

fun bmiMetricWithWhen(
  kg: Double,
  heightM: Double
): String {
  val bmi = kg / (heightM * heightM)
  return when {
    bmi < 18.5 -> "Underweight"
    bmi < 25 -> "Normal weight"
    else -> "Overweight"
  }
}

fun main() {
  bmiMetricOld(72.57, 1.727) eq
    bmiMetricWithWhen(72.57, 1.727)
}

when을 사용한 해법은 여러 선택지 중 하나를 선택하는 좀 더 우아한 해법이다.

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