본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 31. 함수 리터럴

by 김마리님 2020. 12. 10.

Unit은 함수가 들어갈 수 있는 타입이다.

 

package functionLiterialEx

fun main() {
    val instantFunc : (Int)->Unit
    instantFunc = {number: Int -> println("Hello $number") }

    instantFunc(33)
    instantFunc?.invoke(33)
}

 

함수 리터럴에는 익명 클래스와 람다 표현식이 있는데, 위의 예시는 람다 형태이다.

(매개변수) -> 작동할 행동 

으로 이루어진다.

 

함수 리터럴은 return을 적지 않과, 마지막 표현식의 반환 값이 반환값이 된다.

함수 타입 변수 중 null로 넘어올 가능성이 있다면 저렇게 함수만 부르는 것 보다 invoke 표현식을 이용해 nullable하게 불러오는 것이 좋다.

 


 

함수 리터럴을 작성하는 또 다른 방법으로 익명 표현식이 있는데, 이것은 함수의 이름을 표기하지 않는다.

 

package functionLiterialEx

fun main() {
    val instantFunc: (Int) -> Unit = fun(number: Int): Unit {
        println("Hello $number")
        return
    }
    
    instantFunc(33)
    instantFunc?.invoke(33)
}

 

또한 리턴 값을 직접 지정할 수 있어서 반환 값을 설정 할 수 없는 람다식에 비해 훨씬 버그를 일으킬 확률이 적다. 

 


 

만약 람다식 매개변수가 하나라면, 이것을 it으로 표현할 수 있다.

 

package functionLiterialEx

fun main() {
    val instantFunc : (Int)->Unit
     = {println("Hello $it") }

    instantFunc(33)
    instantFunc?.invoke(33)
}

 

반응형