Kotlin是一門(mén)與Swift類似的靜態(tài)類型JVM語(yǔ)言,由JetBrains設(shè)計(jì)開(kāi)發(fā)并開(kāi)源。與Java相比,Kotlin的語(yǔ)法更簡(jiǎn)潔、更具表達(dá)性,而且提供了更多的特性,比如,高階函數(shù)、操作符重載、字符串模板。它與Java高度可互操作,可以同時(shí)用在一個(gè)項(xiàng)目中。InfoQ
高階函數(shù)就是可以接受函數(shù)作為參數(shù)并返回一個(gè)函數(shù)的函數(shù)。Kotlin-in-Chinese
Kotlin 支持函數(shù)作為參數(shù)傳遞,無(wú)需構(gòu)建對(duì)象來(lái)包裝函數(shù)。
無(wú)參數(shù)函數(shù)調(diào)用
class Hello {
fun say() {
Timber.i("Hello World")
}
/**
* 在 Kotlin 中無(wú)返回為 Unit
*
* 此方法接收一個(gè)無(wú)參數(shù)的函數(shù)并且無(wú)返回
*
* 使用參數(shù)名加 () 來(lái)調(diào)用
*/
fun people(hello: () -> Unit) {
hello()
}
/**
* 在 kotlin 中有一個(gè)約定,如果最后一個(gè)參數(shù)是函數(shù),可以省略括號(hào)
*/
fun main() {
people ({ say() })
people { say() }
}
}
** 調(diào)用函數(shù)需使用參數(shù)名加 () **

Kotlin function no parameter.png
有參數(shù)函數(shù)調(diào)用
class Hello {
fun say(msg: String) {
Timber.i("Hello $msg")
}
/**
* 當(dāng)調(diào)用的函數(shù)有形參時(shí),
* 需要在調(diào)用的函數(shù)聲明,并使用聲明的形參;
* 函數(shù)參數(shù)中的形參無(wú)法使用
*/
fun people(arg0: String, hello: (arg1: String) -> Unit) {
hello(arg0)
// hello(arg1) 這樣調(diào)用將報(bào)錯(cuò)
}
fun main() {
people("Android") { say("World") }
}
}

Kotlin function parameter.png
傳入給 arg0 的值貌似未生效 ** ??? **
- @param arg0 實(shí)參
- @param arg1 形參
在people函數(shù)中,arg0是實(shí)參,而arg1是形參,所以不能直接使用;
有點(diǎn)繞 ?? ,可以看下這篇博文 Kotlin 雙冒號(hào) :: 使用。