koltin的常用操作符 (2018-12-10)

koltin的常用操作符(參考他人進(jìn)行整理望几,用于個(gè)人筆記)

  1. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 let
  2. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 with
  3. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 apply
  4. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 run
  5. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 also
  6. 內(nèi)聯(lián)擴(kuò)展函數(shù)之 use

一校焦、內(nèi)聯(lián)擴(kuò)展函數(shù)之 let

1. let函數(shù)底層的inline擴(kuò)展函數(shù)+lambda結(jié)構(gòu)
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
2. let函數(shù)的使用的一般結(jié)構(gòu)
object.let{
it.todo()//在函數(shù)體內(nèi)使用it替代object對(duì)象去訪問其公有的屬性和方法
...
}

//另一種用途 判斷object為null的操作
object?.let{//表示object不為null的條件下庇绽,才會(huì)去執(zhí)行l(wèi)et函數(shù)體
it.todo()
}
3. let函數(shù)適用的場景
  • 從源碼let函數(shù)的結(jié)構(gòu)來看它是只有一個(gè)lambda函數(shù)塊block作為參數(shù)的函數(shù),調(diào)用T類型對(duì)象的let函數(shù)师幕,則該對(duì)象為函數(shù)的參數(shù)基矮。在函數(shù)塊內(nèi)可以通過 it 指代該對(duì)象懂版。返回值為函數(shù)塊的最后一行 或指定 return表達(dá)式
  • 使用場景
    場景一: 最常用的場景就是使用let函數(shù)處理需要針對(duì)一個(gè)可null的對(duì)象統(tǒng)一做判空處理穿扳。
    場景二: 然后就是需要去明確一個(gè)變量所處特定的作用域范圍內(nèi)可以使用。

二浪腐、內(nèi)聯(lián)函數(shù)之with

1. with函數(shù)底層的inline擴(kuò)展函數(shù)+lambda結(jié)構(gòu)
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
2. with函數(shù)使用的一般結(jié)構(gòu)
Object object = new Object()
object.name="張三"
object.age()

// 相比于let 省略了 it  但是使用 最好先判斷非空 object !=null
with(object){
  name="張三"
  age()
}
3. with函數(shù)的適用的場景
  • with函數(shù)和前面的幾個(gè)函數(shù)使用方式略有不同纵揍,因?yàn)樗皇且詳U(kuò)展的形式存在的。它是將某對(duì)象作為函數(shù)的參數(shù)议街,在函數(shù)塊內(nèi)可以通過 this 指代該對(duì)象泽谨。返回值為函數(shù)塊的最后一行 或指定 return表達(dá)式
  • 適用于調(diào)用同一個(gè)類的多個(gè)方法時(shí)特漩,可以省去類名重復(fù)吧雹,直接調(diào)用類的方法即可,經(jīng)常用于Android中RecyclerView中onBinderViewHolder中涂身,數(shù)據(jù)model的屬性映射到UI上

三雄卷、內(nèi)聯(lián)擴(kuò)展函數(shù)之a(chǎn)pply

1. apply函數(shù)的inline+lambda結(jié)構(gòu)
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
2. apply函數(shù)使用的一般結(jié)構(gòu)
Object object = new Object()
object.name="張三"
object.age()

// 和with 基本相似 ,但是可以直接 ?. 方式判斷非空 
object?.{
  name="張三"
  age()
}
3. apply函數(shù)的適用場景
  • 它返回的值是 對(duì)象本身蛤售。
  • apply一般用于一個(gè)對(duì)象實(shí)例初始化的時(shí)候丁鹉,需要對(duì)對(duì)象中的屬性進(jìn)行賦值°材埽或者動(dòng)態(tài)inflate出一個(gè)XML的View的時(shí)候需要給View綁定數(shù)據(jù)也會(huì)用到揣钦,這種情景非常常見。特別是在我們開發(fā)中會(huì)有一些數(shù)據(jù)model向View model轉(zhuǎn)化實(shí)例化的過程中需要用到漠酿。

四冯凹、內(nèi)聯(lián)擴(kuò)展函數(shù)之a(chǎn)pply

1. run函數(shù)的inline+lambda結(jié)構(gòu)
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R = block()
2.run函數(shù)使用的一般結(jié)構(gòu)
Object object = new Object()
object.name="張三"
object.age()

// 和with ,apply 基本相似 ,但是可以直接 ?. 方式判斷非空 炒嘲、返回值不一樣
// apply 返回傳入對(duì)象本身宇姚。
object?.{
  name="張三"
  age()
}
3. run函數(shù)的適用場景
  • 適用于let,with函數(shù)任何場景。因?yàn)閞un函數(shù)是let,with兩個(gè)函數(shù)結(jié)合體夫凸,準(zhǔn)確來說它彌補(bǔ)了let函數(shù)在函數(shù)體內(nèi)必須使用it參數(shù)替代對(duì)象浑劳,在run函數(shù)中可以像with函數(shù)一樣可以省略,直接訪問實(shí)例的公有屬性和方法>
  • 另一方面它彌補(bǔ)了with函數(shù)傳入對(duì)象判空問題寸痢,在run函數(shù)中可以像let函數(shù)一樣做判空處理呀洲。

五、內(nèi)聯(lián)擴(kuò)展函數(shù)之a(chǎn)lso

1. also函數(shù)的inline+lambda結(jié)構(gòu)
@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
2. also函數(shù)使用的一般結(jié)構(gòu)
object.also{
it.todo()//在函數(shù)體內(nèi)使用it替代object對(duì)象去訪問其公有的屬性和方法
...
}

//另一種用途 判斷object為null的操作
//而also函數(shù)返回的則是傳入對(duì)象的本身
object?.also{//表示object不為null的條件下,才會(huì)去執(zhí)行also函數(shù)體
it.todo()
}
3. also函數(shù)的適用場景
  • 和let函數(shù)類似
  • 適用于let函數(shù)的任何場景道逗,also函數(shù)和let很像兵罢,只是唯一的不同點(diǎn)就是let函數(shù)最后的返回值是最后一行的返回值而also函數(shù)的返回值是返回當(dāng)前的這個(gè)對(duì)象。一般可用于多個(gè)擴(kuò)展函數(shù)鏈?zhǔn)秸{(diào)用

六滓窍、use 的使用

1. use的用法
//讀取文件方式一
    val br = BufferedReader(FileReader("hello.txt")) //打開文件讀取
    with(br) { //對(duì)br中的屬性和方法直接進(jìn)行操作
        var line: String?

        while (true) {
            line = readLine() ?: break //讀取一行數(shù)據(jù)卖词,若為空則退出循環(huán)
            println(line) //打印讀取的數(shù)據(jù)
        }
        close() //關(guān)閉文件讀取
    }

    //讀取文件方式二
    BufferedReader(FileReader("hello.txt")).use {
        var line: String?

        while (true) {
            line = it.readLine() ?: break //讀取一行數(shù)據(jù),若為空則退出循環(huán)
            println(line) //打印讀取的數(shù)據(jù)
        }
    }

    //讀取文件方式三
    println(BufferedReader(FileReader("hello.txt")).readText()) //最簡單的讀取文件的方法
2. use的使用總結(jié)
  • 一般使用與文件流的操作吏夯,且不需要 關(guān)閉流 close()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末此蜈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噪生,更是在濱河造成了極大的恐慌裆赵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跺嗽,死亡現(xiàn)場離奇詭異战授,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桨嫁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門植兰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璃吧,你說我怎么就攤上這事楣导。” “怎么了畜挨?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵筒繁,是天一觀的道長。 經(jīng)常有香客問我巴元,道長膝晾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任务冕,我火速辦了婚禮,結(jié)果婚禮上幻赚,老公的妹妹穿的比我還像新娘禀忆。我一直安慰自己,他們只是感情好落恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布箩退。 她就那樣靜靜地躺著,像睡著了一般佳谦。 火紅的嫁衣襯著肌膚如雪戴涝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音啥刻,去河邊找鬼奸鸯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛可帽,可吹牛的內(nèi)容都是我干的娄涩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼映跟,長吁一口氣:“原來是場噩夢啊……” “哼蓄拣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起努隙,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤球恤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荸镊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽斧,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年贷洲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了收厨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡优构,死狀恐怖诵叁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钦椭,我是刑警寧澤拧额,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站彪腔,受9級(jí)特大地震影響侥锦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜德挣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一恭垦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧格嗅,春花似錦番挺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贴铜,卻和暖如春粪摘,著一層夾襖步出監(jiān)牢的瞬間瀑晒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工徘意, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苔悦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓映砖,卻偏偏與公主長得像间坐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邑退,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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