💡 Kotlin
[kotlin] forEach(람다식)의 return break, continue처럼 사용하기
콩드로이드
2024. 1. 5. 23:24
return
가장 가까운 enclosing function을 return 시킨다
val arr = arrayListOf("A","B","C","D","E","F","G")
fun checkForEach() {
arr.forEach {
if(it == "D") return
}
println("찍힐까요 안 찍힐까요?")
}
위의 예제를 실행하면 어떤 결과가 나타날까?
더보기


checkForEach()를 return 시키므로, println문이 찍히지 않는다
함수내의 lambda식을 return하고 싶다면?
return@label
특정 label의 lambda식을 return 한다
val arr = arrayListOf("A","B","C","D","E","F","G")
fun checkForEach() {
arr.forEach {
if(it == "D") return@forEach
}
println("찍힐까요 안 찍힐까요?")
}
위의 예제를 실행하면 어떤 결과가 나타날까?
더보기


forEach문만 return 되었으므로, print문이 찍히게 된다
🔍 그래서 이게 왜?
forEach는 람다식
람다식에서는 continue, break를 사용할 수 없다
하지만, 예제에서의 return은 continue와 같은 역할을 한다
val arr = arrayListOf("A","B","C","D","E","F","G")
fun checkForEachWithRun() {
var cnt = 0
arr.forEach {
++cnt
if (it == "D") return@forEach
println("몇번 실행될까 : $cnt")
}
}
🔍 return을 break처럼 쓰려면 -> run label@ 사용
fun checkForEachWithRun() {
var cnt = 0
run loop@ {
arr.forEach {
++cnt
if (it == "D") return@loop
println("몇번 실행될까 : $cnt")
}
}
}
SCOPE 함수 중 run을 사용해서 forEach를 묶고 run 함수의 label을 리턴하면 된다