函數(shù)類型、lambda表達式

一焚虱、函數(shù)類型

  • 在 Kotlin 里,有一類 Java 中不存在的類型懂版,叫做「函數(shù)類型」鹃栽,這一類類型的對象在可以當(dāng)函數(shù)來用的同時,還能作為函數(shù)的參數(shù)躯畴、函數(shù)的返回值以及賦值給變量

  • 所有函數(shù)類型都有一個圓括號括起來的參數(shù)類型列表以及一個返回類型:(A, B) -> C 表示接受類型分別為 AB 兩個參數(shù)并返回一個 C 類型值的函數(shù)類型民鼓。 參數(shù)類型列表可以為空,如 () -> A蓬抄。返回類型為空 Unit 不能省略丰嘉。

//樣式
(參數(shù)列表類型) -> 返回值類型

//比如,定義一個函數(shù)類型的變量
val sum: (Int) -> Int

//方法中定義 函數(shù)類型參數(shù)
fun test(age: Int, action: (Int) -> String) {}

如需將函數(shù)類型指定為可空嚷缭,使用圓括號:((Int, Int) -> Int)?饮亏。

函數(shù)類型可以使用圓括號進行接合:(Int) -> ((Int) -> Unit)

箭頭表示法是右結(jié)合的,(Int) -> (Int) -> Unit 與前述示例等價阅爽,但不等于 ((Int) -> (Int)) -> Unit路幸。

二、函數(shù)類型實例化

//1.lambda表達式
val sum = { a: Int, b: Int -> a + b }

//2.匿名函數(shù)
val sum1 = fun(a: Int, b: Int) { a + b }

//3.雙冒號付翁,函數(shù)引用
fun sumab(a: Int, b: Int): Int {
    return a + b
}

val sum2 = ::sumab

三简肴、lambda表達式

1.基本形式
組成結(jié)構(gòu)
//例如調(diào)用上面方法,傳入lambda表達式百侧,內(nèi)部會 自動創(chuàng)建對應(yīng)的對象
test(12, { it -> "aa" })
2.基本使用
//方法中定義砰识,需要傳入 函數(shù)類型 的參數(shù)
fun test(age: Int, action: (Int) -> String) {
    val result = action(age)
    println(result)
}

//使用此方法
test(12, { it -> "aa" })

3.語法簡化
login.setOnClickListener({ v: View ->
    //doSomething
})

//如果Lambda為最后一個參數(shù),可以放到括號外面
login.setOnClickListener() { v: View ->
    //doSomething
}

//lambda是setOnClickListener 單參數(shù)佣渴,括號省略
login.setOnClickListener { v: View ->
    //doSomething
}

//lambda表達式中參數(shù)只有一個辫狼,參數(shù)省略,如果需要使用辛润,it代替
login.setOnClickListener {
    //doSomething
}

四予借、匿名函數(shù)

//賦值給變量
val add = fun(a: Int, b: Int): Int { return a + b }

val multiply = fun(a: Int, b: Int): Int { return a * b }

fun calculate(action: (Int, Int) -> Int): Int {
    val a = 1
    val b = 2
    return action(a, b)
}

fun main() {

    println(calculate(add))

    println(calculate(multiply))


}

或者直接在參數(shù)里創(chuàng)建一個 匿名函數(shù)

calculate(fun(a: Int, b: Int): Int { return a + b })

1

五、函數(shù)引用

//定義一個普通函數(shù)/方法
fun cc(a: Int, b: Int): Int {
    return a + b
}


fun main() {

    //用雙冒號創(chuàng)建一個函數(shù)類型的對象
    val ccInstance = ::cc

    cc(1, 2) //直接調(diào)用函數(shù)
    ccInstance(1,2) //用賦值的變量調(diào)用
    (::cc)(1, 2) //對象 ::cc 調(diào)用,和上面等價

}

對于有相同變量名的重載方法灵迫,需要顯示指明變量的函數(shù)類型才行

fun cc(a: Int, b: Int): Int {
    return a + b
}

fun cc(a: Int, b: Int, c:Int): Int {
    return a + b + c
}

fun main() {
    //顯示指明變量具體的函數(shù)類型
    val ccInstance1 : (Int, Int) -> Int = ::cc
    val ccInstance2 : (Int, Int, Int) -> Int = ::cc
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秦叛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瀑粥,更是在濱河造成了極大的恐慌挣跋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狞换,死亡現(xiàn)場離奇詭異避咆,居然都是意外死亡,警方通過查閱死者的電腦和手機修噪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門查库,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人黄琼,你說我怎么就攤上這事樊销。” “怎么了脏款?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵围苫,是天一觀的道長。 經(jīng)常有香客問我撤师,道長剂府,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任剃盾,我火速辦了婚禮腺占,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痒谴。我一直安慰自己湾笛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布闰歪。 她就那樣靜靜地躺著嚎研,像睡著了一般。 火紅的嫁衣襯著肌膚如雪库倘。 梳的紋絲不亂的頭發(fā)上临扮,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音教翩,去河邊找鬼杆勇。 笑死,一個胖子當(dāng)著我的面吹牛饱亿,可吹牛的內(nèi)容都是我干的蚜退。 我是一名探鬼主播闰靴,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钻注!你這毒婦竟也來了蚂且?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幅恋,失蹤者是張志新(化名)和其女友劉穎杏死,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捆交,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡淑翼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了品追。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玄括。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肉瓦,靈堂內(nèi)的尸體忽然破棺而出遭京,到底是詐尸還是另有隱情,我是刑警寧澤风宁,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蛹疯,受9級特大地震影響戒财,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捺弦,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一饮寞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧列吼,春花似錦幽崩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至理郑,卻和暖如春蹄溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背您炉。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工柒爵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赚爵。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓棉胀,卻偏偏與公主長得像法瑟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唁奢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容