首發(fā)于公眾號: DSGtalk1989
13.基礎操作符run、with宦棺、let、also黔帕、apply
-
T.run和run
對象的
run
方法代咸,在方法體中的最后一行可以做返回值,且方法體中的this
代表對象本身的引用成黄。val str: String = "Boss" val result = str.run { print(this) // 參數(shù) 69 //區(qū)間返回值 }
直接使用
run
方法呐芥,其實就是class
本身調(diào)用的run
,所以this
指向的是class
奋岁。val str: String = "Boss" val result : Int = run { print(this) // 參數(shù) this@class 69 //區(qū)間返回值 }
-
T.let
跟
run
方法一樣思瘟,也會返回最后一樣的值。不同的是引用對象T
用的是it
而不是this
闻伶,一般這種情況下滨攻,之所以使用it
不使用this
是由于this
用來表示外面的類class
了val str: String = "Boss" val result : Int = str.let { print(it) // 參數(shù) print(this) // this@class 69 //區(qū)間返回值 }
let還有一個比較牛逼的地方,可以用作對null的安全過濾,?.let調(diào)用當出現(xiàn)null的時候?qū)⒉粫\行l(wèi)et的方法
val listWithNulls: List<String?> = listOf("Kotlin", null) for (item in listWithNulls) { //此處不會打印出null光绕,只會打印出null item?.let { println(it) } }
-
T.also
跟上面兩個方法不同的是女嘲,返回對象本身,即不管我們在方法體中做任何操作诞帐,在方法體的最后一行返回任何東西欣尼,都是返回的
T
。同時方法體中也是用it
來代表對象本身停蕉,this
代表類class
愕鼓,跟上面的let
唯一不同的就是let
最終返回的方法體最后一行,而also
放回的是對象本身val str: String = "Boss" val result : String = str.also { print(it) // 參數(shù) print(this) // this@class 69 //區(qū)間返回值 }
-
T.apply
使用
this
慧起,不用it
菇晃。并且返回對象本身。val str: String = "Boss" val result : String = str.apply { print(this) // 參數(shù) 69 //區(qū)間返回值 }
-
with(T)
可以理解成也是
class
調(diào)的方法完慧,跟run
方法不同的是谋旦,run
方法中this
代表的是類class
,而with
的this
代表的是T
屈尼。同時返回的是方法體的最后一行val result1 : Int = with(str) { print(this) // 接收者 69 //區(qū)間返回值 }
-
總結
- 要么只能用
this
代表自己册着,要么就是it
代表自己,this
代表對象所在類 -
also
脾歧,apply
返回對象本身甲捏,let
,run
返回方法體最后一行鞭执。 -
let
和also
有this
有it
司顿,apply
和run
只有it
不用去強記,IDE自帶提醒和報錯兄纺,久而久之大溜,自然會記得。
- 要么只能用
Kotlin學習筆記之 9 數(shù)據(jù)類與密封類
Kotlin學習筆記之 13 基礎操作符run估脆、with钦奋、let、also疙赠、apply
Kotlin學習筆記之 19 高階函數(shù)與 lambda 表達式
Kotlin學習筆記之 20 內(nèi)聯(lián)函數(shù)