Kotlin 操做符:run、with、let、also、apply 的差別與選擇 android
Kotlin 的一些操做符很是類似,咱們有時會不肯定使用哪一種功能。在這裏我將介紹一個簡單的方法來清楚地區分他們的差別,最後以及如何選擇使用。bash
首先咱們如下這個代碼:app
class MyClass {
fun test() {
val str: String = "Boss"
val result = str.let {
print(this) // 接收者
print(it) // 參數
69 //區間返回值
}
print(result)
}
}複製代碼
在上面個例子中,咱們使用了 let 操做符,當使用這個函數時,咱們所須要問題的有三點:函數
由於咱們使用的是 let,因此對應是:測試
咱們用表格更直觀的做顯示:ui
操做符 | 接收者(this) | 傳參(it) | 返回值(result) |
---|---|---|---|
let | this@Myclass | String( "Boss" ) | Int( 69 ) |
依此類推:咱們能夠這段代碼爲其他的功能作相似的事情。this
如下是測試操做符通用的代碼,你可使用 let、run、apply、also 中任何的操做符替換 xxx。spa
class MyClass {
fun test() {
val str: String = "Boss"
val result = str.xxx {
print(this) // 接收者
print(it) // 參數
69 //區間返回值
}
print(result)
}
}複製代碼
返回值爲:code
操做符 | 接收者(this) | 傳參(it) | 賦值(result) |
---|---|---|---|
T.let() | this@Myclass | String( "Boss" ) | Int( 69 ) |
T.run() | String( "Boss" ) | 編譯錯誤 | Int( 69 ) |
T.apply() | String( "Boss" ) | 編譯錯誤 | String( "Boss" ) |
T.also() | this@Myclass | String( "Boss" ) | String( "Boss" ) |
with 與 also 操做符在使用上有一些細微的差別,例如:cdn
class MyClass {
fun test() {
val str: String = "Boss"
val result = with(str) {
print(this) // 接收者
// print(it) // 參數
69 //區間返回值
}
print(result)
}
}複製代碼
class MyClass {
fun test() {
val str: String = "Boss"
val result = run {
print(this) // 接收者
// print(it) // 參數
69 //區間返回值
}
print(result)
}
}複製代碼
操做符 | 接收者(this) | 傳參(it) | 返回值(result) |
---|---|---|---|
run() | this@Myclass | 編譯錯誤 | Int( 69 ) |
with(T) | String("Boss") | 編譯錯誤 | Int( 69 ) |
合二爲一:
操做符 | 接收者(this) | 傳參(it) | 返回值(result) |
---|---|---|---|
T.let() | this@Myclass | String( "Boss" ) | Int( 69 ) |
T.run() | String( "Boss" ) | 編譯錯誤 | Int( 69 ) |
run() | this@Myclass | 編譯錯誤 | Int( 69 ) |
with(T) | String( "Boss" ) | 編譯錯誤 | Int( 69 ) |
T.apply() | String( "Boss" ) | 編譯錯誤 | String( "Boss" ) |
T.also() | this@Myclass | String( "Boss" ) | String( "Boss" ) |
而關於何時咱們應該用到什麼操做符,能夠參考這個圖:
參考文章: