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을 사용한 해법은 여러 선택지 중 하나를 선택하는 좀 더 우아한 해법이다.