들어가기 전에
코틀린에서 제공하는 when은 기존의 여러 언어가 제공하던 switch~case문을 대체하면서 조건에서 더 유연한 처리가 가능합니다. 한번 알아봅시다!
핵심 키워드
- when (인자)
- when
학습하기
들어가기 전에
코틀린에서 제공하는 when은 기존의 여러 언어가 제공하던 switch~case문을 대체하면서 조건에서 더 유연한 처리가 가능합니다. 한번 알아봅시다!
핵심 키워드
학습하기
when문으로 다양한 조건 처리
주어진 인자에 대해 다양한 조건을 만들거나 인자 없이 여러개의 조건을 구성할 수 있습니다. 구성하는 방법은 다음과 같습니다.
when (인자) {
인자에 일치하는 값 혹은 표현식 -> 수행할 문장
인자에 일치하는 범위 -> 수행할 문장
...
else -> 문장
}
화살표(->) 왼쪽에는 일치하는 값, 표현식, 범위를 사용할 수 있고 오른쪽에는 수행할 문장을 사용합니다. 조건과 일치하는 값이 없으면 else문 다음에 작성한 문장을 실행합니다.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 블록 구문 사용 가능
print("x는 1, 2가 아닙니다.")
}
}
화살표 오른쪽에 사용한 수행 문장에서는 한줄인 경우에는 중괄호가 필요하지 않으며 또 switch~case에서 사용하던 break문을 사용하지 않아도 됩니다.
인자가 없는 when
when에 인자가 주어지지 않으면 else if 처럼 각각의 조건을 실행할 수 있습니다.
when {
조건[혹은 표현식] -> 실행문
...
}
참고자료
http://www.yes24.com
생각해보세요.
when구문의 조건에는 함수, 콤마로 구분한 여러개의 값 등 여러가지가 사용될 수 있습니다. 다양한 조건을 필요로 하는 문제를 하나 생각해서 when구문으로 구성해보세요.
comment
fun main() {
print("Enter your BMI: ")
val bmi = readLine()!!.toDouble()
var result = "정상 체중입니다."
when {
bmi <= 18.4 -> result = "저체중입니다. 정상 체중을 유지하세요."
bmi in 23.0..24.9 -> result = "과체중입니다."
bmi >= 25.0 -> result = "비만입니다. 관리가 필요합니다."
}
println("BMI: $bmi, result: $result")
}
// Enter your BMI: 21.4
BMI: 21.4, result: 정상 체중입니다.
BMI 지수 측정 프로그램을 나타냈습니다.
is 부분이 이해가 잘..되지 않습니다.
유투브 구독자 수에 따른 플레이버튼을 나타냈습니다.
물품별로 할인된 가격을 출력하는 프로그램
- 입력 : 물품 이름
- 조건 : 가격이 '100 이상 200 이하'이면 10% 할인된 가격으로
- 출력 : 할인된 가격
package chap05.section1 fun main() { print("Enter the item:") val item = readLine() var price: Double = 0.0 if (item.equals("apple")) { price = 100.0 } else if (item.equals("orange")) { price = 120.0 } else if (item.equals("melon")) { price = 50.0 } when (price) { in 100.0..200.0 -> price *= 1.1 } println("item: $item, price: $price") }
질문이 있습니다.
"when과 is 키워드를 함께 사용하기" 파트에서,
val str = "안녕하세요"
val result = when(str){
is String -> "문자열입니다."
else -> false
}
코드를 실행하면 정상 실행되지만, 변수 str에 "안녕하세요" 대신에 정수형으로 선언하면(val str = 3) 실행하면,
is String -> "문자열입니다." 부분에서 빌드 실패가 발생합니다.
str이 문자열인지 물어보는 문장인데 str이 문자열이 아닐 때는 실행되지 않습니다.
코틀린 제작자들의 철학이 느껴지네요