레이블
단순한 break와 continue는 자신이 속한 루프의 범위보다 더 밖으로 점프할 수 없다. 그러나 레이블을 사용하면 break와 continue가 자신을 둘러싼 여러 루프의 경계 중 한군데로 점프할 수 있어서 현재 실행 중인 맨 안쪽 루프의 영역에 제한되지 않고 점프할 수 있다.
‘레이블@’과 같이 레이블 이름 다음에 @을 사용해 레이블을 붙일 수 있다. 다음 코드에서 레이블 이름은 outer이다.
BreakAndContinue/ForLabeled.kt
import atomictest.eq
fun main() {
val strings = mutableListOf<String>()
outer@ for (c in 'a'..'e') {
for (i in 1..9) {
if (i == 5) continue@outer
if ("$c$i" == "c3") break@outer
strings.add("$c$i")
}
}
strings eq listOf("a1", "a2", "a3", "a4",
"b1", "b2", "b3", "b4", "c1", "c2")
}
레이블이 붙은 continue@outer는 outer@이 붙은 루프의 실행을 계속한다. 레이블이 붙은 break@outer는 outer@이 붙은 루프의 마지막을 찾아서 거기서부터 실행을 계속한다.