코틀린

Do it! 코틀린 프로그래밍, 04-3 흐름의 중단과 반환

조요피 2021. 8. 26. 22:31

흐름 제어문

  • return : 함수에서 결괏값을 반환하거나 지정된 라벨로 이동
  • break: for문이나 while문의 조건식에 상관없이 반복문을 끝낸다.
  • continue: for문이나 while문의 본문을 모두 수행하지 않고 다시 조건식으로 넘어간다.

예외 처리문

  • try {} catch {} finally {}

람다식에서 return 사용하기

람다식에서 return은 라벨 표기와 함께 사용해야하고 break와 continue는 아직 지원되지 않음

fun main() {
    demo()
}

inline fun inline(a: Int, b: Int, out: (Int, Int) -> Unit) {
    out(a,b)
}

fun demo(){
    println("start")
    inline(13, 3) { a, b ->
        val result = a + b
        if(result > 10) return // demo 함수 종료
        println(result)
    }
    println("end")
}
/* 출력 */
// start

// 라벨과 함께 return 사용하기
fun main() {
    demo()
}

fun noInline(a: Int, b: Int, out: (Int, Int) -> Unit) { // inline 제거
    out(a,b)
}

fun demo(){
    println("start")
    noInline(13, 3) lit@{ a, b ->
        val result = a + b
        if(result > 10) return@lit
        println(result)
    } // return@lit, 이곳으로 return
    println("end") // 실행됨
}
/* 출력 */
//start
//end


// 암묵적 라벨
// 명시적으로 선언하지 않아도 함수이름을 그대로 사용하여 암묵적으로 라벨 사용가능
fun demo(){
    println("start")
    noInline(13, 3) { a, b ->
        val result = a + b
        if(result > 10) return@noInline
        println(result)
    } // return@lit, 이곳으로 return
    println("end") // 실행됨
}

// 익명 함수를 사용하여 반환
fun demo(){
    println("start")
    func1(13, 3, fun (a, b){
        val result = a + b
        if(result > 10) return
        println(result)
    })
    println("end") // 실행됨
}

람다식과 익명 함수를 할당할 때 주의할 점

fun hi() = { println("Hi") }
hi() // 아무것도 출력안됨
hi()() // Hi 출력

// 함수가 할당되는 것을 명시적으로 표현하려면 익명함수를 쓰는 것이 더 좋다
fun hi() = fun() { println("Hi") }

break와 continue에 라벨 함께 사용하기

fun main() {
    demo()
}

fun demo(){
    println("start")
    first@ for(i in 1..5){
        second@ for(j in 1..5) {
            if(j == 3) break@first // continue@first 가능
            println("$i $j")
        }
    }
    println("end")
}

//start
//1 1
//1 2
//end