현재 루프구성 중 가장 가까운 루프를 종료
for (i in 1..10) {
if (i == 3) break
println(i)
}
//1 2 출력
가장 가까운 루프의 다음으로 넘어감
for (i in 1..10) {
if (i == 3) continue
println(i)
}
// 1 2 4 5 6 7 8 9 10 출력
식별자 + @ 형태로 사용
가장 가까운 루프말고 원하는 루프의 흐름을 제어
loop@ for (i in 1..100) {
for (j in 1..100) {
if (...) break@loop //안쪽 for가 아닌 바깥쪽 for을 빠져나오게됨
}
}
Label로 break & continue
loop@ for (i in 1..100) {
for (j in 1..100) {
if (...) break@loop //안쪽 for가 아닌 바깥쪽 for을 빠져나오게됨
}
}
Label로 return
return - 가장 가까운 함수나 익명함수에서 반환
fun main(){
a()
}
fun a() {
var ints = listOf(0,1,2,3)
ints.forEach(
fun(value: Int) { //이 함수에서 반환
if(value == 1) return
print(value)
}
)
println("END")
}
//023END
b. 람다에서 return - 가장 가까운 함수가 a라 a에서 return시켜버림
fun main(){
a()
}
fun a() {
var ints = listOf(0,1,2,3)
ints.forEach(
{
if(it == 1) return
print(it)
}
)
println("END")
}
//0
/* 번외 - ()생략가능
ints.forEach{
if(it == 1) return
print(it)
}
*/
c. 람다식에 대해서만 return하려면 label 사용해야함
return@~~~. return에 붙여서 사용 (띄어쓰기x)
fun main(){
a()
}
fun a() {
var ints = listOf(0,1,2,3)
ints.forEach label@{
if(it == 1) return@label
print(it)
}
println("END")
}
//023END
d. 암시적 레이블 - 람다식에서만 return을 사용하기
직접 label을 사용하는 것보다 암싲거 레이블이 편리함
암시적 레이블은 람다가 사용된 함수의 이름과 동일
return@함수이름만 표기하면됨. ex) return@forEach
fun main(){
a()
}
fun a() {
var ints = listOf(0,1,2,3)
ints.forEach {
if(it == 1) return@forEach
print(it)
}
println("END")
}
//023END
e. label return시 값을 반환할 경우
return@label 반환값 ← 형태로 사용
return + @label + 값