익명 함수 (Anonymous Function)
앞서 살펴본 람다식 문법에서는 함수의 리턴 타입을 지정하는 방법이 누락되어 있습니다. 대부분 리턴 타입을 자동으로 유추할 수 있기에 불필요하기 때문입니다. 하지만 리턴 타입을 명시적으로 지정해야 할 필요가 있으면 익명 함수를 사용할 수 있습니다.
익명 함수는 함수명이 없다는 것을 빼면 보통 함수 선언과 거의 똑같은 모습을 하고 있습니다. body도 다음과 같이 표현식이나 블록으로 선언할 수 있습니다.
표현식
fun(x: Int, y: Int): Int = x + y |
블록
fun(x: Int, y: Int): Int { return x + y } |
파라미터와 리턴 타입은 보통 함수와 동일한 방법으로 지정합니다. 단, 파라미터 타입을 문맥상 유추할 수 있으면 생략할 수 있습니다.
람다식에서 qualified return syntax를 이용하는 것이 다소 번거롭기 때문에 람다식 대신에 익명 함수를 사용할 수 있습니다.
fun main(args: Array<String>) { val isPositive = fun(num: Int): Boolean { val isPositive = num > 0 return isPositive } println("isPositive(10) = ${isPositive(10)}") } |
isPositive(10) = true |
또한 위에서 말했듯이 리턴 타입을 명시적으로 지정해야 할 필요가 있으면 다음과 같이 익명 함수를 사용할 수 있습니다.
fun main(args: Array<String>) { val returnAny = { "retyrnAny" as Any } val returnAnyTest = fun(): Any = "returnAnyTest" println("returnAny = ${returnAny()}") println("returnAny2 = ${returnAnyTest()}") } |
returnAny = retyrnAny returnAny2 = returnAnyTest |
Any로 리턴 타입을 명시적으로 지정했지만 println에서 toString()으로 변환되어 출력된 것입니다.
'프로그래밍 > Kotlin' 카테고리의 다른 글
코틀린(Kotlin) List & Map (0) | 2018.01.17 |
---|---|
코틀린(Kotlin) 배열(Array) (0) | 2018.01.11 |
코틀린(Kotlin) 리시버가 있는 함수 리터럴 (0) | 2018.01.05 |
코틀린 Lambda Expression Syntax (0) | 2017.12.21 |
코틀린 Higher-Order Functions #2 (0) | 2017.12.21 |
코틀린 Higher-Order Functions #1 (0) | 2017.12.20 |
코틀린(Kotlin) Control Flow #2 (0) | 2017.12.19 |