kotlin排序口訣?在Kotlin中,函數是一等公民(first class),這意味着函數可以被存儲在變量或者數據結構中,它是有類型的Kotlin使用函數類型來描述一個函數的具體類型一個完整語法的函數類型如下:,我來為大家科普一下關于kotlin排序口訣?下面希望有你要的答案,我們一起來看看吧!
在Kotlin中,函數是一等公民(first class),這意味着函數可以被存儲在變量或者數據結構中,它是有類型的。Kotlin使用函數類型來描述一個函數的具體類型。一個完整語法的函數類型如下:
(x:Int, y:Int) -> Int
其特點如下:
(Int, Int) -> Int
Int.(Int) -> Int
接收者類型在參數前,和參數所在的小括号用點連接。關于帶接收者的函數類型在之後會詳細講解。
2. 函數類型實例化既然函數有類型,那函數類型變量的值是什麼呢?這就涉及到函數類型的實例化。函數類型的實例化包括以下幾種常用方式。
a. lambda表達式:
{ i, j-> this i j }
b. 匿名函數:
fun(s1: Int, s2: Int): Int {
return 1
}
a. 頂級,本地,成員或者擴展函數。例如:String::toInt。
b. 頂級,成員,或者擴展屬性:List::size。
c. 構造函數:::Regex。
classIntTransformer:(Int)->Int{
overrideoperatorfuninvoke(x:Int):Int=TODO()
}
valintFunction:(Int)->Int=IntTransformer()
函數類型的值可以通過invoke操作符調用,以下是示例。
val stringPlus: (String, String) -> String = String::plus
println(stringPlus.invoke("<-", "->"))
println(stringPlus("Hello, ", "world!"))
函數字面值是指不聲明,而直接作為表達式傳遞的函數。它包括兩種,lambda表達式及匿名函數。
3.1 lambda表達式lambda表達式的全語法形式如下:
val sum: (Int, Int) -> Int = {x: Int, y: Int -> x y}
其特點如下:
val sum: (Int, Int) -> Int = {x, y -> x y}
val sum: (Int, Int) -> Int = {x, y ->
x y
x-y
}
其返回值是x-y
Kotlin有一個約定:如果函數的最後一個參數是函數,那麼作為相應參數傳入的lambda表達式可以放在圓括号之外。示例如下:
以lambda表達式作為參數的高階函數如下:
fun lambdaWrapper(labmda: (Int) -> Int) {
labmda.invoke(1)
}
其調用示例可以簡寫為:
fun lambdaTest() {
lambdaWrapper() { it ->
it 1
}
}
如果lambda表達式是唯一的參數,那其圓括号可以省略,示例如下:
fun lambdaTest() {
lambdaWrapper{ it ->
it 1
}
}
由于本lambda表達式隻有一個參數,其可以隐式聲明為it,并去掉該參數的聲明和->。示例如下:
fun lambdaTest() {
lambdaWrapper{
it 1
}
}
自Kotlin1.1起,如果lambda表達式的參數未使用,那麼可以用下劃線取代其名稱:
map.forEach { _, value -> println("$value!") }
lambda表達式不能顯示的指定返回值的類型。如果需要顯示指定返回值的類型,則需要使用匿名函數。匿名函數和普通函數非常類似,除了其函數名被省略。其示例如下:
fun(x: Int, y: Int): Int {
return x y
}
匿名函數的參數和返回值類型的聲明與常規函數相同,同時類型如果可以推斷出來則可以省略。例如以下示例:
fun anonymousWrapper(labmda: (Int) -> Int) {
labmda.invoke(1)
}
fun anonymousTest() {
anonymousWrapper(fun (i: Int): Int {
return i 1
})
}
anonymousTest中對匿名函數的調用是完整語法形态,由于參數類型和返回值類型可以推斷,因此,其可以簡寫為
fun anonymousTest() {
anonymousWrapper(fun (i) = i 1)
}
請注意,匿名函數參數總是在括号内傳遞。 允許将函數留在圓括号外的簡寫語法僅适用于lambda表達式。
lambda表達式與匿名函數之間的另一個區别是非局部返回的行為。一個不帶标簽的return語句總是在用fun關鍵字聲明的函數中返回。這意味着lambda表達式中的return将從包含它的函數返回,而匿名函數中的return将從匿名函數自身返回。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!