interface OnClick {
fun clicked(view: View)
}
fun setOnClickListener(listener: OnClieck) { /*...*/ }
fun setOnClickListener(listener: (View) -> Unit) { /*...*/ }
// 람다 표현식
setOnClieckListener { /*...*/ }
// 익명 함수
setOnClickListener(fun(view) { /*...*/ })
// 함수 레퍼런스
setOnClickListener(::println)
// 제한된 함수 레퍼런스
setOnClickListener(this::showUsers)
// 선언된 함수 타입을 구현한 객체로 전달
class ClieckListener: (View) -> Unit {
override fun invoke(view: View) { /*...*/ }
}
setOnClickListener(ClieckListener())
typealias OnClieck = (View) -> Unit
fun setOnClickListener(listener: OnClieck) { /*...*/ }
// 함수 타입을 받는 forEach
inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit
val list = listOf(Pair(1, "a"), Pair(2, "b"))
// 구조 분해 가능
list.forEach { (num, str) -> println("$num, $str") }