Kotlin標(biāo)準(zhǔn)函數(shù)

一探颈、標(biāo)準(zhǔn)函數(shù)

標(biāo)準(zhǔn)函數(shù)是指Standard.kt文件中定義的函數(shù)词裤,任何Kotlin代碼都可以自由的調(diào)用所有標(biāo)準(zhǔn)函數(shù)黍判,標(biāo)準(zhǔn)函數(shù)有很多我們這里主要學(xué)習(xí)下幾個(gè)常用的標(biāo)準(zhǔn)函數(shù)。

1.1 apply

apply函數(shù)可看作一個(gè)配置函數(shù)篙梢,你可以傳入一個(gè)接收者顷帖,然后調(diào)用一系列函數(shù)來配置它以便使用,如果提供lambda給apply函數(shù)執(zhí)行渤滞,它會返回配置好的接收者贬墩。

fun main() {
    var map = mutableMapOf("帥次" to 18).apply {
        put("apply-北京",188)
        put("apply-上海",288)
    }
    println(map)//{帥次=18, apply-北京=188, apply-上海=288}
}

  • 1、創(chuàng)建可變Map
  • 2妄呕、通過apply()函數(shù)添加數(shù)據(jù)

如下陶舞,咱們啟動一個(gè)界面并傳參

        val intent = Intent(this,NextActivity::class.java).apply {
            putExtra("name","sc")
            putExtra("age",19)
        }
        startActivity(intent)

可以看到,調(diào)用一個(gè)個(gè)函數(shù)類配置接收者時(shí)绪励,變量名(map肿孵、intent)就省掉了,這是因?yàn)槭栉海趌ambda表達(dá)式里停做,apply能讓每個(gè)配置函數(shù)都作用于接收者,這種行為有時(shí)又叫做相關(guān)作用域大莫,因?yàn)閘ambda表達(dá)式里的所有函數(shù)調(diào)用都是針對接收者的蛉腌,或者說,它們是針對接收者的隱式調(diào)用

1.2 let

let函數(shù)能使某個(gè)變量作用于其lambda表達(dá)式里烙丛,讓it關(guān)鍵字能引用它舅巷。let與apply比較,let會把接收者傳給lambda河咽,而apply什么都不傳钠右,匿名函數(shù)執(zhí)行完,apply會返回當(dāng)前接收者库北,而let會返回lambda的最后一行爬舰。

    var letData = 20.let {
        "不知不覺過去 $it 年了"
    }
    println(letData)

1.3 also

also函數(shù)和let函數(shù)功能相似,和let一樣寒瓦,also也是把接收者作為值參傳給lambda,但有一點(diǎn)不同:also返回接收者對象情屹,而let返回lambda結(jié)果。因?yàn)檫@個(gè)差異杂腰,also尤其適合針對同一原始對象垃你,利用副作用做事,既然also返回的是接收者對象喂很,你就可以基于原始接收者對象執(zhí)行額外的鏈?zhǔn)秸{(diào)用惜颇。

    //also
    var alsoData = "AndroidSHUAICI"
    var strAlso = alsoData.also {
        println(it.length)//14
    }.also {
        println(it.startsWith("Android"))//true
    }
    println(strAlso)//AndroidSHUAICI

1.4 run

具備接收者的隱式調(diào)用(apply)返回的是lambda的最后一行(let)少辣。

    //run
    var str = "Android帥次"
    var s = str.run {
        startsWith("Android")
    }
    println(s)//true

加強(qiáng)版

fun main() {
    var runS = str.run {
        startsWith("Android")
        println(this)//Android帥次
        "吼吼哈嘿"http://這里決定下一個(gè)run的this類型
    }.run {
        println(this)//吼吼哈嘿
        18//這里的18傳入到isAge函數(shù)
    }.run(::isAge)
    println(runS)//false
}

fun isAge(age: Int) = age > 15


從上面看出凌摄,run支持鏈?zhǔn)秸{(diào)用,run也支持函數(shù)引用漓帅。

1.5 with

with函數(shù)是run的變體锨亏,功能一樣,但是調(diào)用with時(shí)需要值參作為其第一個(gè)參數(shù)傳入忙干。

    var strWith = "Android帥次"
    var sWith = strWith.run {
        startsWith("Android")
        "run-$this"
    }
    println(sWith)//run-Android帥次
    sWith = with(strWith) {
        startsWith("Android")
        "with-$this"
    }
    println(sWith)//with-Android帥次

1.6 takelf

如果需要判斷某個(gè)條件是否滿足器予,再決定是否可以賦值變量或執(zhí)行某項(xiàng)任務(wù)takelf就非常有用捐迫,概念上講乾翔,takelf函數(shù)類似于if語句,但它的優(yōu)勢是可以直接在對象實(shí)例上調(diào)用施戴,避免了臨時(shí)變量賦值的麻煩反浓。

takelf函數(shù)需要判斷l(xiāng)ambda中提供的條件表達(dá)式,給出true或false結(jié)果:

  • 如果判斷結(jié)果是true赞哗,從takelf函數(shù)返回接收者對象勾习。
  • 如果是false,則返回null懈玻。
    val strTakeIf = "Android帥次"
    val tkif = strTakeIf.takeIf {
        it.startsWith("Android")//返回true
    }
    println(tkif)//Android帥次
    var tkifS= strTakeIf.takeIf {
        it.startsWith("Android")
    }.takeIf {
        println("Length:${it?.length}")//Length:9
        it?.length!! > 20//返回false
    }
    println(tkifS)//null

1.7 takeUnless

takelf輔助函數(shù)takeUnless巧婶,只有判斷你給定的條件結(jié)果是false時(shí)乾颁,takeUnless才會返回原始接收者對象,跟takelf剛好相反

    val strTakeIfUn = "Android帥次"
    val un = strTakeIf.takeUnless {
        it.startsWith("Android")//返回true
    }
    println(un)//null
    var un2 = strTakeIfUn.takeUnless {
        it.startsWith("帥次")//返回false
    }
    println(un2)//Android帥次

takeUnless函數(shù)有點(diǎn)調(diào)皮艺栈,了解一下就行英岭。還是感覺takelf比較好理解和使用。

下面給大家分享兩份資料:字節(jié)跳動內(nèi)部超高質(zhì)量Kotlin筆記湿右、谷歌大佬編寫高級Kotlin強(qiáng)化實(shí)戰(zhàn)(附Demo)诅妹。

一、字節(jié)跳動內(nèi)部超高質(zhì)量Kotlin筆記

1.準(zhǔn)備開始

  • 基本語法
  • 習(xí)慣用語
  • 編碼風(fēng)格

2.基礎(chǔ)

  • 基本類型
  • 控制流
  • 返回與跳轉(zhuǎn)

3.類和對象

  • 類和繼承
  • 屬性和字段
  • 接口
  • 可見性修飾詞
  • 擴(kuò)展
  • 數(shù)據(jù)對象
  • 泛型
  • 嵌套類
  • 枚舉類
  • 對象表達(dá)式和聲明
  • 代理模式
  • 代理屬性

4.函數(shù)和lambda表達(dá)式

  • 函數(shù)
  • 高階函數(shù)與 lambda 表達(dá)式
  • 內(nèi)聯(lián)函數(shù)

5.其它

  • 多重申明
  • Ranges
  • 類型檢查和自動轉(zhuǎn)換
  • This表達(dá)式
  • 等式
  • 運(yùn)算符重載
  • 空安全
  • 異常
  • 注解
  • 反射
  • 動態(tài)類型

6.互用性

  • 動態(tài)類型

7.工具

  • 使用Maven
  • 使用 Ant
  • 使用 Gradle
  • 使用Griffon

8.FAQ

  • 與java對比
  • 與Scala對比

基礎(chǔ)知識掌握之后就是靠實(shí)戰(zhàn)提升了毅人!

二吭狡、谷歌大佬編寫高級Kotlin強(qiáng)化實(shí)戰(zhàn)(附Demo)

第一章 Kotlin入門教程

  • Kotlin 概述
  • Kotlin 與 Java 比較
  • 巧用 Android Studio
  • 認(rèn)識 Kotlin 基本類型
  • 走進(jìn) Kotlin 的數(shù)組
  • 走進(jìn) Kotlin 的集合
  • 集合問題
  • 完整代碼
  • 基礎(chǔ)語法

第二章 Kotlin 實(shí)戰(zhàn)避坑指南

  • 方法入?yún)⑹浅A浚豢尚薷?/li>
  • 不要 Companion 丈莺、INSTANCE 划煮?
  • Java 重載,在 Kotlin 中怎么巧妙過渡一下缔俄?
  • Kotlin 中的判空姿勢
  • Kotlin 復(fù)寫 Java 父類中的方法
  • Kotlin “狠”起來弛秋,連TODO 都不放過!
  • is俐载、as` 中的坑
  • Kotlin 中的 Property 的理解
  • also 關(guān)鍵字
  • takeIf 關(guān)鍵字
  • takeIf 關(guān)鍵字
  • 單例模式的寫法

第三章 項(xiàng)目實(shí)戰(zhàn)《Kotlin Jetpack 實(shí)戰(zhàn)》

  • 從一個(gè)膜拜大神的 Demo 開始
  • Kotlin 寫 Gradle 腳本是一種什么體驗(yàn)蟹略?
  • Kotlin 編程的三重境界
  • Kotlin 高階函數(shù)
  • Kotlin 泛型
  • Kotlin 擴(kuò)展
  • Kotlin 委托
  • 協(xié)程“不為人知”的調(diào)試技巧
  • 圖解協(xié)程:suspend

更多Android可以查看我的個(gè)人介紹!6粲丁挖炬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市状婶,隨后出現(xiàn)的幾起案子意敛,更是在濱河造成了極大的恐慌,老刑警劉巖太抓,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件空闲,死亡現(xiàn)場離奇詭異令杈,居然都是意外死亡走敌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門逗噩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掉丽,“玉大人,你說我怎么就攤上這事异雁〈氛希” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵纲刀,是天一觀的道長。 經(jīng)常有香客問我篮赢,道長救崔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任暂论,我火速辦了婚禮,結(jié)果婚禮上拌禾,老公的妹妹穿的比我還像新娘取胎。我一直安慰自己,他們只是感情好湃窍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布闻蛀。 她就那樣靜靜地躺著,像睡著了一般您市。 火紅的嫁衣襯著肌膚如雪觉痛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天墨坚,我揣著相機(jī)與錄音秧饮,去河邊找鬼。 笑死泽篮,一個(gè)胖子當(dāng)著我的面吹牛盗尸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帽撑,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泼各,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亏拉?” 一聲冷哼從身側(cè)響起扣蜻,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎及塘,沒想到半個(gè)月后莽使,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笙僚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年芳肌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋层。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亿笤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栋猖,到底是詐尸還是另有隱情净薛,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布蒲拉,位于F島的核電站肃拜,受9級特大地震影響痴腌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燃领,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一衷掷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柿菩,春花似錦戚嗅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凉泄,卻和暖如春躏尉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背后众。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工胀糜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒂誉。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓教藻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親右锨。 傳聞我的和親對象是個(gè)殘疾皇子括堤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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