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)
}
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 33. 타입 매개변수 비교하기(reified) (0) | 2020.12.11 |
---|---|
Kotlin] 32. 함수 참조(Function Reference) (0) | 2020.12.10 |
Kotlin] 30. 데이터 클래스 (0) | 2020.12.10 |
Kotlin] 29. 중첩 클래스 (0) | 2020.12.10 |
Kotlin] 28. 다이아몬드 문제 (0) | 2020.12.10 |