본문 바로가기
💡 Kotlin

[kotlin] forEach(람다식)의 return break, continue처럼 사용하기

by 콩드로이드 2024. 1. 5.

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을 리턴하면 된다 


 

'💡 Kotlin' 카테고리의 다른 글

[Activity] LaunchMode  (0) 2023.06.15
[Kotlin] Collection 함수 - (1) 원소 변환 및 필터, 특정원소 검색  (0) 2023.01.12
[Kotlin] mutable Collection  (0) 2023.01.08
[Kotlin] Collection (List, Set, Map)  (0) 2023.01.03
[kotlin] Pair  (0) 2023.01.02