[Kotlin][언어공부-7] label

2020. 6. 22. 10:51Android/Kotlin

 

Label 이라 하면 처음 접하는 것이라 어려울 수 있는데 

c의 go to 문을 생각하면 된다.

 

타언어로 오면서 go to 문을 사용하면 복잡해져서 쓰지 말라는게 정책이였는데  

함수형 언어로 가면서 label 정책이 거의 필수가 되어버렸다.

 

1. Return 할 때 반환 값이 있으면 호출된 함수로 이동  -> return 반환값2. Return@레이블  반환값  -> 해당 레이블로 값을 가지고 복귀함 -> 코드가 실행되는 곳이 이름 없는 함수(익명함수)거나 람다식으로 되어 있으면 이런식으로 사용함 3. break,continue -> 자바와 비슷 break는 반복문을 종료하고 나감 continue는 다음 라인을 무시하고 반복문 처음으로 감.

 

4. break@레이블,continue@레이블

 

-> break는 반복문 종료하고 레이블로 나감-> continue는 다음라인을 무시하고 레이블로 이동

 

 

 

// 함수형 언어이기 때문에 리턴되는 곳을 명확히 해야할 필요가 있다

//return 반환값 : 값만 있으면 호출된 함수로 이동
//return@레이블 반환값 .. : 해당 레이블로 값을 가지고 복귀
//break,continue 
// break@레이블,continue@레이블  : break는 반복문을 종료 지정한 레이블로 나감, continue는 다음라인을 무시, 지정 레이블로 이동

fun main(args: Array<String>) {
    ExitLoop();
    println(lambdaReturn)

    //함수형 스타일의 호라용
    (0..10).forEach{ if (it > 3) return@forEach else println(it)}
}

//@레이블 지정후, break@레이블로 나감

fun ExitLoop() {
        HereToExit@ for(i in 0..2) {
            for(j in 0..10) {
                if(j==5) break@HereToExit;
                println("i->$i, j->$j")
            }
            println("j loop end")
        }
    println(" i loop end")

}

//이름없는 함수(람다식)의 리턴
val lambdaReturn = Exit@{
    if(true) {
        return@Exit 3
    }
    1000
}
반응형

'Android > Kotlin' 카테고리의 다른 글

[Kotlin][언어공부-9] 예외처리  (0) 2020.06.25
[Kotlin][언어공부-8] Collection  (0) 2020.06.23
[Kotlin][언어공부-6] 제어문  (1) 2020.06.18
[Kotlin][언어공부-5] function  (0) 2020.06.16
[Kotlin][언어공부-4] Any형  (0) 2020.06.10