return
함수에서 결괏값을 반환하거나 지정된 라벨로 이동
break
for나 while의 조건식에 상관없이 반복문을 끝냄
continue
for나 while의 반복문의 본문을 모두 수행하지 않고 조건으로 넘어감
InlineLambdaReturn.kt
fun main()
{
retFunc()
}
inline fun inlineLambda(a : Int, b : Int, out:(Int, Int) -> Unit)
{
out(a,b)
}
fun retFunc()
{
println("start of retFunc")
inlineLambda(13, 3)
{
a, b -> val result = a + b
if(result > 10) return //10보다 크면 이 함수를 빠져 나감
println("result : $result") //10보다 크면 이 문장에 도달하지 못함
}
println("end of retFunc")
}
//결과
start of retFunc
if문에 조건 때문에 리턴이 retFunc함수 밖으로 빠져 나가기 때문에 아래 println 두코드가 모두 출력되지 않는다. 마지막 println문까지 출력하고 싶으면 아래처럼 바꾸면 된다.
fun retFunc()
{
println("start of retFunc")
inlineLambda(13, 3)
lit@{ //람다식 블록의 시작 부분에 라벨을 지정함
a, b -> val result = a + b
if(result > 10) return@lit //라벨을 사용한 블록의 끝부분으로 반환
println("result : $result")
}
println("end of retFunc") //그럼 이 부분이 실행이 된다.
}
fun retFunc()
{
println("start of retFunc")
inlineLambda(13, 3, fun (a, b) //3번 째 인자로 함수 전달
{
val result = a + b
if(result>10) return //익명 함수 내에서만 리턴
println("end of retFunc")
}) //리턴이 끝나고 reFunc 함수 밖으로 빠져 나가지 않는다.
}
익명 함수
return 키워드가 익명 함수 자체에서만 동작하므로, 호출한 함수에는 영향을 미치지 않는다, 또한 익명함수를 사용하면 return 키워드가 익명 함수 자체에서만 빠져나가고, 호출한 함수로는 빠져나가지 않는다.
break
fun main()
{
labelbreak()
}
fun labelbreak()
{
println("laberBreak")
for(i in 1..5)
{
second@ for(j in 1..5)
{
if (j == 3) break //j가 3일 때 if문에서 빠져 나간다. 4, 5 숫자도 실행하지 않는다.
println(" i : $i, j : $j")
}
println("after for i")
}
}
break + 라벨
fun main()
{
laberBreak()
}
fun laberBreak()
{
println("laberBreak")
first@ for(i in 1..5)
{
second@ for (j in 1..5)
{
if (j == 3) @first //라벨로 인해 for문 밖으로 나간다. j가 3이될 때, 반복문이 끝난다.
println("i : $i, j : $j")
}
}
println("after for i")
}