Kotlin When

Kotlin when

 when 은 Java 에서의 switch case 와 비슷하다. 하지만, 수식이나 값의 결과에 따라 수행될 부분을 결정하게 되며, 자바와 다르게 정수 뿐만 아니라, 타입의 값을 비교할 수 있다.

when

val a1 = 1

when (a1) {
1 -> println("a1 1입니다.")
2 -> println("a1 2입니다.")
3 -> println("a1 3입니다.")
}
여러 줄 일 경우 {} 으로 묶어 준다.
val a1 = 1

when (a1) {
1 -> println("a1 1입니다.")
2 -> {
println("여러 줄 일 경우")
println("a1 2입니다.")
}
3 -> println("a1 3입니다.")
}
조건이 모두 아닐때는 else 를 사용한다.
val a1 = 1

when (a1) {
1 -> println("a1 1입니다.")
2 -> {
println("여러 줄 일 경우")
println("a1 2입니다.")
}
3 -> println("a1 3입니다.")
else -> println("a1 1,2,3이 아닙니다.")
}
 조건이 여러개일 경우에 or 연산으로 "," 를 사용한다.
val a1 = 3

when (a1) {
1, 2 -> println("a1 1이거나, 2입니다.")
3, 4 -> println("a1 3이거나, 4입니다.")
}
 when은 조건 타입에, kotlin 에서 지원하는 모든 타입이 가능하다. 
val a1 = 55.55

when (a1) {
33.33 -> println("a1 33.33 입니다.")
55.55 -> println("a1 55.55 입니다.")
}
 범위 지정도 가능하다.
 a1 이 3이기 때문에 a1은 1에서 3사이의 숫자입니다. 이 출력 된다.
val a1 = 3

when (a1) {
in 1..3 -> println("a1 1에서 3사이의 숫자입니다.")
in 4..5 -> println("a1 4에서 5사이의 숫자입니다.")
}

>> a1은 1에서 3사이의 숫자입니다. 

 범위가 중복이 된다면, 상위의 조건만 수행한다. 상위의 조건만 수행 후 아래의 조건을 수행 하지 않는다고 생각하면 된다. 

 a1이 3일 경우에 아래 조건 둘 다를 만족하지만, 상위 조건만 수행한뒤, when 절을 종료 한다.

val a1 = 3

when (a1) {
in 1..3 -> println("a1 1에서 3사이의 숫자입니다.")
in 3..5 -> println("a1 4에서 5사이의 숫자입니다.")
}

>> a1은 1에서 3사이의 숫자입니다.

Kotlin Swtich-Case

 Kotlin 에서 Swtich-Case에 해당되는 when을 알아보았는데, 그럼 Kotlin 에서 Swtich-Case를 전혀 사용하지 못할까?

val val1 = "a"

switch(val1) {
case "a" :
println("a");
break;
case "b" :
println("b");
break;
default :
println("null");
break;
}

Kotlin: Unexpected tokens (use ';' to separate expressions on the same line)
Kotlin: Unexpected tokens (use ';' to separate expressions on the same line)
Kotlin: Unresolved reference: switch
Kotlin: Unresolved reference: case
Kotlin: 'break' and 'continue' are only allowed inside a loop
Kotlin: Unresolved reference: case
Kotlin: 'break' and 'continue' are only allowed inside a loop
Kotlin: Unresolved reference: default
Kotlin: 'break' and 'continue' are only allowed inside a loop 

 많은 에러가 발생한다, switch, case, defalut 등 의 용어가 전부 사용할 수 없다고 에러를 뱉어낸다.
















댓글

이 블로그의 인기 게시물

Intel® HAXM installation failed 해결하기

Kotlin Interface

Kotlin this, super